用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中吗?
谢谢
创建您的主要图像,并将其视为您的“画布”。
从那里,使用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在画布上,这削减在右侧。
编辑
我调整了代码,更类似于你在做什么。
是的,但我如何添加所有我的第一张图片来创建一张照片?我如何计算需要创建最终图像的图像数量?因为如果初始图片是128 * 128,我将需要6张图片,但如果它们是32x32,我将需要更多 – Jensen 2010-05-29 00:05:40
谢谢它会帮助我解决问题 – Jensen 2010-05-29 00:09:54
我明白你的意思,你只想添加尽可能多的如同将在画布图像中显示(尽管裁剪)。你需要围绕代码的一部分编写一个循环来加载图像,'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);
+1真棒例如图像(当我得到新鲜的票一天,这是...) – JYelton 2010-05-28 23:51:24