2014-04-15 89 views
1

我正嘗試基於使用PHP我自己的PNG圖像進行自定義精靈,但我有兩個問題:加入多個PNG圖像到一個單一的一個PNG使用PHP

  1. 輸出圖像it'sa集合堆疊的PNG ...換句話說:源PNG是一個優於其他的。
  2. 我需要輸出圖像的透明背景!

這是我使用的代碼:

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

回答

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庫。