我想在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编写这段代码吗?
由于
答案 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);