2008-11-23 102 views
43

嘿,當我創建一個縮略圖,嘗試在png上保持透明度時遇到一些麻煩,任何人有任何這方面的經驗?任何幫助將是巨大的,這裏是我目前在做什麼:PNG透明度與PHP

$fileName= "../js/ajaxupload/tees/".$fileName; 

list($width, $height) = getimagesize($fileName); 

$newwidth = 257; 
$newheight = 197; 

$thumb = imagecreatetruecolor($newwidth, $newheight); 
imagealphablending($thumb, true); 
$source = imagecreatefrompng($fileName); 
imagealphablending($source, true); 

imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

imagesavealpha($thumb, true); 
imagepng($thumb,$newFilename); 

回答

81

我已經成功做這樣的過去:

$thumb = imagecreatetruecolor($newwidth, $newheight); 
imagealphablending($thumb, false); 
imagesavealpha($thumb, true); 

$source = imagecreatefrompng($fileName); 
imagealphablending($source, true); 

imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

imagepng($thumb,$newFilename); 

我發現輸出的圖像質量要好得多使用imagecopyresampled()imagecopyresized()

+0

破解它!多謝! – BastardPrince 2008-11-23 23:59:57

+1

這對我不起作用:( – 2by 2011-10-11 16:30:35

1

dycey's answer to "How do I resize..."。實質上,在進行任何其他操作之前,您需要使用透明度填充整個背景。

+0

該問題仍未得到解答。雖然,也許這兩個需要合併。 – strager 2008-11-23 23:11:10

2

那些函數訪問底層gdlib庫,它是一個精美的玩具,但不是爲了獲得好的結果。如果您有選擇,請改用imagemagick。缺點是目前沒有好的php綁定,所以你需要通過shell訪問它,通常你不能在共享主機上訪問它。

13

忘記顏色透明度指數,它從不適用於所有渲染產品。而是使用阿爾法圖層蒙版:

$image = imagecreatetruecolor($size, $size); 

imagealphablending($image, false); 
imagesavealpha($image, true); 

$trans_layer_overlay = imagecolorallocatealpha($image, 220, 220, 220, 127); 
imagefill($image, 0, 0, $trans_layer_overlay);