2011-11-15 83 views
9

我想縮小PHP中的一些透明圖像與GD,每當我這樣做,有一個奇怪的黑色邊框被添加在它周圍。PHP GD調整透明圖像給黑色邊框

以前 before

代碼後 enter image description here

<?php 
    $image = imagecreatefromstring(file_get_contents('logo.png')); 
    $width = imagesx($image); 
    $height = imagesy($image); 

    $newWidth = $width - 1; 
    $newHeight = $height - 1; 
    $output = imagecreatetruecolor($newWidth, $newHeight); 
    imagecolortransparent($output, imagecolorallocatealpha($output, 0, 0, 0, 127)); 
    imagealphablending($output, false); 
    imagesavealpha($output, true); 
    imagecopyresampled($output, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); 

    header('Content-Type: image/png'); 
    imagepng($output); 
?> 

看來,如果我改變了代號爲新的尺寸是一樣的舊(刪除- 1),不會出現黑色邊框。所以調整大小會導致問題。

有沒有人有一個想法可能是什麼錯?

編輯:我剛剛意識到它只發生在imagecopyresampled而不是imagecopyresized。然而,imagecopyresampled提供了更好的視覺效果,如果可能的話,我想使它工作。

+0

看起來像抗鋸齒是使用黑色爲啞光的顏色。 – Brad

+0

@Brad的確如此。但是,文檔頁面指出,反鋸齒默認情況下處於關閉狀態,並且它只與GD的捆綁版本一起使用,我不使用該版本。也許一些其他功能正在造成它,但我沒有看到任何其他參數,據我所知... –

+0

我只是意識到它只發生在['imagecopyresampled'](http://php.net/manual/en /function.imagecopyresampled.php)而不是['imagecopyresized'](http://php.net/manual/en/function.imagecopyresized.php)。不過,'imagecopyresampled'可以提供更好的視覺效果,如果可能的話,我希望能夠使其工作。 –

回答

3

我認爲這裏的問題是你的源圖像。

你有什麼不是帶alpha通道的真彩色PNG,而是帶有透明色的索引顏色PNG。這是明顯的,如果你在Photoshop中打開圖像:

Image as seen in Photoshop

此圖像抗鋸齒已經(這給黃文白十歲上下的邊界在這裏看到)創建的,但是當你重新大小它的子像素計算可能會超出其邊界。

我懷疑,如果您修復圖像,使其具有Alpha通道的完整RGB,則不會出現此問題。

+0

感謝您的回答。你可能知道有什麼方法使它能夠以編程方式工作,還是可以撤銷? –

+0

要做的最好的事情是獲得一個好的源圖像。這在Photoshop中很容易解決。在[email protected]發郵件給我,我會發給你最新的文件。 – Brad

+0

非常感謝您的幫助。問題是這是由我們的客戶在Web界面上完成的。我想他們必須做。再次感謝。 –