使用PHP将多个PNG图像连接到一个PNG中

时间:2014-04-15 07:10:12

标签: php image-processing web

我正在尝试使用PHP基于我自己的PNG制作自定义精灵,但我遇到了两个问题:

  
      
  1. 输出图像它是堆叠的PNG的集合......换句话说:源PNG是一个在另一个上面。
  2.   
  3. 我需要输出图像的透明背景!
  4.   

这是我使用的代码:

$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'); 

1 个答案:

答案 0 :(得分:2)

在使用PHP GD尝试完成工作一小时后,我决定给这个名为“ImageWorkshop”的图书馆提供机会,可以从这里访问:

  

http://phpimageworkshop.com/

结果很棒,我用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库。