Я хотел бы создать картинку на PHP с помощью GD, состоящей из разных других изображений. Например, у меня есть 6 фотографий (или больше), и я хотел бы создать ОДНУ изображение, которое содержит эти разные изображения.
Сложность заключается в том, что моя последняя фотография должна иметь фиксированную ширину и высоту (304×179), поэтому, если разные изображения слишком велики, их нужно обрезать. Это пример IconFinder:
Эта фотография имеет 6 изображений http://img.ruphp.com/image/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
– это изображение 100х100, которое я icon.jpg
в холст так, что его верхний левый угол находится на 275, 102 в холсте, который отсекает правую сторону.
редактировать
Я скорректировал код, чтобы быть более похожим на то, что вы делаете.
Здесь ни один проверенный винт-модификатор из одного из моих сценариев, надеюсь, что он может быть полезен:
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);
с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);
с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);