unir imagenes imagecopymerge php image cron

imagenes - Fusionar imágenes en PHP



imagecopymerge (1)

Tengo un sitio web www.iniciativa-iex.com , está conectado con Twitter, obtiene los datos usando la API para cada usuario y muestra su imagen de perfil en el desplazador. Solía ​​obtener los datos cada vez que se llamaba al sitio web, pero era un problema real porque realizaba muchas llamadas y los tokens de mis aplicaciones se borraban con mucha frecuencia. Ahora lo hice unir todas las imágenes,

include ''../twitter/LibTwitter.php''; $sql = mysql_query("SELECT * FROM `users` WHERE `suspended` != ''true'' ORDER BY id DESC"); $fullW = mysql_num_rows($sql)*128; $fullH = 128;$width1 = 0; $img = imagecreate($fullW, $fullH); while($result = mysql_fetch_array($sql)) { $userid = $result["userid"]; $busqueda = $twitter->usersShow($userid, null); $src = $busqueda["profile_image_url"]; $filetype = str_replace(".", "", substr($src, -4)); if ($filetype == "rmal"){$filetype = "";} $file = str_replace("_normal.".$filetype, "_reasonably_small.".$filetype, $src); switch($filetype){ case ''png'': $sub = imagecreatefrompng($file) or die( "Cannot open $filetype file `$file - $src` where USER = `$userid`/n"); break; case ''gif'': $sub = imagecreatefromgif($file) or die( "Cannot open $filetype file `$file - $src` where USER = `$userid`/n"); break; case ''jpeg'': case ''jpg'': case ''JPG'': case '''': $sub = imagecreatefromjpeg($file) or die( "Cannot open $filetype file `$file - $src` where USER = `$userid`/n"); break; } if(!$sub){die(''Missing sub'');}imagecopy ( $img, $sub, $width1 , 0, 0, 0, 128, 128); // imagecopy ( $img, $sub, $width1 , 0, 0, 0, $width, $height) or die( "Cannot copy $filetype file `$file - $src` where USER = `$userid`/n"); $width1 = $width1 + 128; imagedestroy($sub); } imagepng($img, ''users.png''); imagedestroy($img);

EDITAR: Obtuve el código funcionando pero ahora muestra una imagen distorsionada y de mala calidad, y necesito que CHMOD 0777 funcione, ¿alguna sugerencia?

DESPLAZADOR DE IMAGEN http://www.iniciativa-iex.com/cron/users.png

¡Gracias!


No voy a escribir todo el código para ti, pero te proporcionaré una de mis funciones que creó una imagen como esta:

<img1> <img2> <img3> <img4> <img5> <img6>

De seis imágenes. Mi script asume que el tamaño de cada imagen es 240x20 , tendrás que hacerlo a tu manera.

// Sizes of one image $width = 240; $height = 20; // The whole image $fullW = $width*2; $fullH = $height*3; // Allocate image with exact size for 6 images $img = imagecreate( $fullW, $fullH) or die("Cannot Initialize new GD image stream/n");; // I was creating images based on their name, so here''re name parts $parts = array( ''real'', ''imaginary''); $keys = array( ''normalized'', ''code'', ''code2''); // Two loops iterating trough all images, you''ll be doing it one probably foreach( $parts as $i => $part){ foreach( $keys as $j => $key){ // Generate name $file = $prefix . ''_'' . $part . ''_'' . $key . ''.png''; // I didn''t need any special handling for errors, add your own, destroy image // if anything goes wrong and so on $sub = imagecreatefrompng( $file) or die( "Cannot open png file `$file`/n"); // After looking this function up in manual everything should be clear imagecopy ( $img, $sub, $i*$width, $j*$height, 0, 0, $width, $height) or die( "Cannot copy data from `$file`/n"); // Unload current image imagedestroy( $sub); } } // Save image imagepng( $img, $prefix . ''.png''); echo "Saving: $prefix.png/n"; imagedestroy( $img);

Editar: las imágenes no son lo suficientemente grandes

Si sus imágenes ( $sub ) no son lo suficientemente grandes (por ejemplo, 40x40 px) debe verificar su tamaño y usar imagecopyresampled() :

if( (imagesx( $sub) < $width) || (imagesy( $sub) < $height)){ imagecopyresampled( $img, $sub, $width1, 0, 0, 0, $width, $height, imagesx( $sub), imagesy( $sub)); } else { imagecopy ( $img, $sub, $width1 , 0, 0, 0, $width, $height); }

O actualícelo como lo desee y necesite.