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

时间:2010-05-28 23:48:32

标签: php gd image

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

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

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

该图片由6幅图像组成,但第3只鸟(绿色)被切割,4,5和6被切割在底部。这就是我想要的,你能给我一些帮助,用PHP编写这段代码吗?

由于

2 个答案:

答案 0 :(得分:13)

创建主图像并将其视为“画布”。

从那里,使用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处,从而切断了右侧。

修改

我将代码调整为与您正在进行的操作更相似。

答案 1 :(得分:0)

这里有一个没有经过测试的修改spinet来自我的一个脚本,希望它可以是有用的:

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