PNG透明与PHP

嘿,当我创build一个缩略图,试图保持一个PNG的透明度有麻烦,任何人有任何经验呢? 任何帮助将是伟大的,这就是我目前正在做的:

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

过去我曾经这样做过,

 $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()更好的输出图像质量

忘记颜色透明度指数,它不会在所有的渲染产品中工作。 而是使用alpha图层蒙版:

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

imagecopyresized不正确地支持透明度。

imagecopymerge ,但它不会resize。

解决scheme? 你最终可能会手动resize。

这些函数访问底层的gdlib库,这是一个很好的玩具,但不是为了获得好的结果。 如果您有select,请改用imagemagick 。 缺点是目前没有好的php绑定,所以你需要通过shell访问它,通常你不能在共享主机上访问它。

请参阅dycey对“如何resize…”的回答 。 实质上,在进行其他操作之前,您需要使用透明度填充整个背景。