用GD创建一张包含其他图像的图片

问题描述:

我想用PHP创建一张图片,其中GD由不同的其他图片组成。例如,我有6张照片(或更多),我想创建一张包含这些不同照片的照片。用GD创建一张包含其他图像的图片

难度在于我的最终图片必须有一个固定的宽度和高度(304x179),所以如果不同的图片太大,它们必须被剪切。这是从IconFinder一个例子:

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

这个图象是由6个图像构成的,但第三鸟(绿色)是板缺,并且图4,5和6在底部板缺。这是我想要的,你能给我一些帮助来写这个代码在PHP中吗?

谢谢

+0

+1真棒例如图像(当我得到新鲜的票一天,这是...) – JYelton 2010-05-28 23:51:24

创建您的主要图像,并将其视为您的“画布”。

从那里,使用imagecopy()将较小的图像复制到画布图像。

例如看到这个:

<?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); 
?> 

在我的例子,icon.jpg是一个100x100的图像,我在画布上我将使得其左上角位于275,102在画布上,这削减在右侧。

编辑

我调整了代码,更类似于你在做什么。

+0

是的,但我如何添加所有我的第一张图片来创建一张照片?我如何计算需要创建最终图像的图像数量?因为如果初始图片是128 * 128,我将需要6张图片,但如果它们是32x32,我将需要更多 – Jensen 2010-05-29 00:05:40

+0

谢谢它会帮助我解决问题 – Jensen 2010-05-29 00:09:54

+0

我明白你的意思,你只想添加尽可能多的如同将在画布图像中显示(尽管裁剪)。你需要围绕代码的一部分编写一个循环来加载图像,'imagecopy'将它们加载到画布上。所有图像的尺寸是否相同?我不知道如何计算它们在画布中的位置,但是可以使用'imagesx'和'imagesy'来查找尺寸。 – JYelton 2010-05-29 00:11:26

这里测试从我的脚本之一修改尖晶石一个没有,希望它可以是有益的:

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);