Я хотел бы создать изображение в PHP с GD, составленным различными другими изображениями. Например, у меня есть 6 изображений (или больше), и я хотел бы создать ОДНО изображение, кто содержит эти различные изображения.
Трудность состоит в том, что мое конечное изображение должно иметь фиксированную ширину и высоту (304x179), поэтому если различные изображения являются слишком большими, они должны быть сокращены. Это - пример от IconFinder:
Это изображение составлено 6 изображениями, но 3-я (зеленая) птица является cutted, и 4, 5 и 6 являются cutted в нижней части. Это - то, что я хочу, можно ли дать мне некоторую справку для написания этого кода в PHP?
Спасибо
Здесь непроверенный спинет модификации из одного из моих скриптов, надеюсь, он может быть полезен:
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);
Создайте свое основное изображение и считайте его своим «холстом».
Оттуда используйте 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 на холсте. , который обрезает правую сторону.
Править
Я скорректировал код, чтобы он был больше похож на то, что вы делаете.