2010-05-28 27 views
5

Me gustaría crear una imagen en PHP con GD compuesta por diferentes otras imágenes. Por ejemplo, tengo 6 imágenes (o más) y me gustaría crear UNA imagen que contenga estas imágenes diferentes.Crear una imagen con GD contiene otras imágenes

La dificultad es que mi imagen final debe tener un ancho fijo y altura (304x179), por lo que si las diferentes imágenes son demasiado grandes que hay que cortar. Este es un ejemplo de IconFinder:

This picture have 6 images http://cdn.iconfinder.net/design/images/_thumbs/is_twitter.png

Esta imagen está compuesta por 6 imágenes, pero la tercera ave (verde) es cortada, y el 4, 5 y 6 son cutted en la parte inferior. Esto es lo que quiero, ¿me pueden ayudar a escribir este código en PHP?

Gracias

+0

+1 imagen de ejemplo impresionante para (cuando llegue a la califican frescos para el día, es decir ...) – JYelton

Respuesta

13

Crear la imagen principal y la consideran su "lienzo".

A partir de ahí, utilizar imagecopy() para copiar las imágenes más pequeñas en la imagen de la lona.

ver esto por ejemplo:

<?php 
header('Content-Type: image/jpg'); 
$canvas = imagecreatetruecolor(304, 179); 
$icon1 = imagecreatefromjpeg('icon.jpg'); 
$icon2 = imagecreatefromjpeg('icon2.jpg'); 
// ... add more source images as needed 
imagecopy($canvas, $icon1, 275, 102, 0, 0, 100, 100); 
imagecopy($canvas, $icon2, 0, 120, 0, 0, 100, 100); 
// ... copy additional source images to the canvas as needed 
imagejpeg($canvas); 
?> 

En mi ejemplo, icon.jpg es una imagen de 100x100, que estoy poniendo en el lienzo de tal manera que su esquina superior izquierda se encuentra a 275, 102 en el lienzo, que corta del lado derecho.

Editar

ajusté el código para ser más similar a lo que está haciendo.

+0

Sí, pero ¿cómo agrego todas mis primeras imágenes para crear UNA imagen? ¿Y cómo cuento cuántas imágenes necesitaré para crear la imagen final? Porque si las fotos iniciales son 128 * 128 necesitaré 6 fotos por ejemplo, pero si son 32x32 necesitaré más – Jensen

+0

Gracias Me ayudará a resolver el problema – Jensen

+0

veo lo que quieres decir, sólo desea añadir tantos como se mostrará (aunque recortado) en la imagen del lienzo. Tendrá que escribir un bucle alrededor de la parte del código que carga las imágenes y 'imagecopy' en el lienzo. ¿Todas las imágenes serán del mismo tamaño? No estoy seguro de cómo desea calcular la posición de ellos en el lienzo, pero puede usar 'imagesx' y' imagesy' para encontrar las dimensiones. – JYelton

0

Aquí un probado ninguno modificar espineta de uno de mis guiones, espero que pueda ser útil:

header('Content-type: image/png'); 

    $image = array() //Populate this array with the image paths 

    //Create the Letters Image Objects 
     foreach($image as $a){ 
     $image['obj'][] = imageCreateFromPNG($a); 
     }unset($a); 

     $canvasW = 300; 
     $canvasH = 300; 

    //Create Canvas 
     $photoImage = imagecreatetruecolor($canvasW,$canvasH); 
     imagesavealpha($photoImage, true); 
     $trans_color = imagecolorallocatealpha($photoImage, 0, 0, 0, 127); 
     imagefill($photoImage, 0, 0, $trans_color); 

    //Merge Images 
     $Offset_y = 0; 
     $images_by_row = 3; 
     $images_rows_height = 100; // height of each image row 
     $counter = 0; 

     foreach($image['obj'] as $a){ 
     $counter++; 

     $width = ceil(imagesx($a)); 
     $height = ceil(imagesy($a)); 

     if(!isset($offset)){ $offset = 1; } 

     imageComposeAlpha($photoImage, $a, $offset, $Offset_y,$width,$height); 

     if($offset >= 1){ 
      $offset = $offset + $width; 
     } 

     //Check if new row next time 
     if($counter >= $images_by_row){ 
      if($images_by_row%$counter){ 
      $offset_y += $images_rows_height; 
      } 
     } 

     }unset($a); 

     imagepng($photoImage); 
Cuestiones relacionadas