PHP: Calculando el número de apariciones de un color en una imagen paletizada usando GD

$i  = imagecreate(1000, 1000);  
$c1 = imagecolorallocate($i, 0x00, 0x00, 0x00);  
$c2 = imagecolorallocate($i, 0xFF, 0xFF, 0xFF);  

imagefill($i, 0, 0, $c2);  

for ($n = 0; $n < 100; $n++) imagesetpixel($i, $n, $n, $c1);  

printf("Method1 (iterating using php) {\n");  
{  
    $t0 = microtime(true);  
    ob_start(); imagegd($i); $data = substr(ob_get_clean(), 0x40D);  
    printf("  Output image: %.4f seconds\n", microtime(true) - $t0);  

    $t0 = microtime(true);  
    $count = array();  
    list($w, $h) = array(imageSX($i), imageSY($i));  
    for ($y = 0; $y < $h; $y++) {  
        for ($x = 0; $x < $w; $x++) {  
            @$count[imagecolorat($i, $x, $y)]++;  
        }  
    }  
    $count = count_chars($data, 1);  
    arsort($count);  
    printf("  Counting: %.4f seconds\n", microtime(true) - $t0);  
    print_r($count);  
}  
printf("}\n");  

printf("Method2 (hack) {\n");  
{  
    $t0 = microtime(true);  
    ob_start(); imagegd($i); $data = substr(ob_get_clean(), 0x40D);  
    printf("  Output image: %.4f seconds\n", microtime(true) - $t0);  

    $t0 = microtime(true);  
    $count = count_chars($data, 1);  
    arsort($count);  
    printf("  Counting: %.4f seconds\n", microtime(true) - $t0);  
    print_r($count);  
}  
printf("}\n");  

Leer más...

phpMedia: Ejemplo de RPG 2D en phpmedia

Aprovechando que hacía tiempo hice una prueba de minirpg en javascript, y luego un port en flash online y con chat (cliente+servidor en D) y que ya tenía los gráficos y las animaciones, he portado eso mismo a php usando phpmedia.

Los gráficos son de Tales of Eternia (juego que traducimos al español hace unos años). Con un filtro 2xsai o 2xeagle si no recuerdo mal. Los personajes que se usan en la demo son Reid y Farah. Mientras que el escenario (que todavía no está puesto ya que es solo una demo de colisiones), es el Dojo de Regulus.

Prueba de RPG 2D en phpmedia

Leer más...

phpMedia: Y llegaron los shaders...

Ya se puede usar GLSL en phpmedia:

Ejemplo: http://phpelegante.googlepages.com/phpmedia_test_glsl.7z

error_reporting(E_ALL | E_STRICT);  

Screen::title('Shader test');  
$screen = Screen::init(800, 600);  
$key = 'Keyboard';  

$shader = new Shader("  
    uniform sampler2D image, mask;  
    uniform float step;  
    void main (void) {  
        gl_FragColor.rgb = texture2D(image, vec2(gl_TexCoord[0])).rgb;  
        gl_FragColor.a = texture2D(mask , vec2(gl_TexCoord[1])).r + step;  
    }  
");  

$mask = Bitmap::fromFile('mask.png');  
$image = Bitmap::fromFile('file.jpg');  
$arrows = Bitmap::fromFile('arrows.png');  

$v = -1.0;  

$timer = 0;  

while (!$key::pressed($key::ESC)) {  
    if ($key::down($key::LEFT )) $v -= 0.03;  
    if ($key::down($key::RIGHT)) $v += 0.03;  

    Math::clamp($v, -1.0, 1.0);  

    $screen->blit($image, 0, 0, 1, 0, 1, $shader, array('mask' => $mask, 'step' => $v));  
    $screen->blit($arrows, 16, 16, 1, 0, 0.6 + abs(cos($timer / 64)) * 0.8);  

    $timer++;  
    Screen::frame();  
}  

Leer más...

phpMedia: Ejemplo de nave

He hecho un pequeño ejemplo en phpmedia 2:

http://code.google.com/p/phpmedia/wiki/SampleNave

Leer más...

Suscribirse via RSS