Я пытаюсь создать собственные спрайты на основе собственных PNG с использованием PHP, но у меня возникли две проблемы:
- Выходное изображение – это коллекция сложенных PNG … другими словами: исходные PNG – одни над другими.
- Мне нужен прозрачный фон для выходного изображения!
Это код, который я использовал:
$width = 210; $height = 190; $layers = array(); $layers[] = imagecreatefrompng("copy.png"); $layers[] = imagecreatefrompng("cut.png"); $image = imagecreatetruecolor($width, $height); // to make background transparent? imagealphablending($image, false); $transparency = imagecolorallocatealpha($image, 0, 0, 0, 127); imagefill($image, 0, 0, $transparency); imagesavealpha($image, true); imagealphablending($image, true); for ($i = 0; $i < count($layers); $i++) { imagecopy($image, $layers[$i], 0, 0, 0, 0, $width, $height); } imagealphablending($image, false); imagesavealpha($image, true); imagepng($image, 'final_img.png');
Через час, пытаясь выполнить задание, используя только PHP GD, я решил дать возможность этой Библиотеке под названием «ImageWorkshop», которая доступна здесь:
Результат – УДИВИТЕЛЬНЫЙ, с менее 10 строк кода я решаю ситуацию. Вот как:
(Очевидно, сначала вам нужно скачать ImageWorkshop)
ПРИМЕЧАНИЕ. Я использую немного описательный код, чтобы все понимали 🙂
require_once('libs/PHPImageWorkshop/ImageWorkshop.php'); /*The Empty Layer have 100x100... And is TRANSPARENT!!*/ $emptyLayer = ImageWorkshop::initVirginLayer(100, 100); $cut = ImageWorkshop::initFromPath(__DIR__ . '/icons/copy.png'); $copy = ImageWorkshop::initFromPath(__DIR__ . '/icons/cut.png'); /*Set the position of "cut" and "copy" icons inside the emptyLayer*/ $emptyLayer->addLayerOnTop($cut, 20, 10, 'LT'); $emptyLayer->addLayerOnTop($copy, 20, 30, 'LT'); // Saving the result $dirPath = __DIR__ . "/icons/"; $filename = "output.png"; $createFolders = true; //will create the folder if not exist $backgroundColor = null; // transparent, only for PNG (otherwise it will be white if set null) $imageQuality = 100; // useless for GIF, usefull for PNG and JPEG (0 to 100%) $emptyLayer->save($dirPath, $filename, $createFolders, $backgroundColor, $imageQuality);
Это все!
Кстати, эта небольшая библиотека использует библиотеку PHP GD.