PNG - 保持透明度

时间:2013-04-18 04:34:44

标签: php image-processing png gd alpha

我正在尝试重新设计我的网站,以便我原始的正方形,基于图块的图像渲染可以更像是图像的剪切......以摆脱网格图案。

以下是它最初的样子......

enter image description here

这是我想要的粗略模型:

enter image description here

所以我重新保存了一个透明背景的图片缩略图...我只想让狗展示,而正方形是透明的,这将显示网站的背景。

enter image description here

然而,当我在页面上呈现它时,它具有这种黑色背景。

enter image description here

我已经检查了我的CSS,看看是否有某种img类,或渲染漫画的类...甚至引导程序,看看哪里可能有背景颜色分配给黑色(还有搜索十六进制代码000000),但没找到一个...

然后我发现它与我的缩略图脚本重新采样png的方式有关...因为我得到了所谓的透明图像的黑色背景,所以我责怪imagecreatetruecolor() {{1} }。

我在这里尝试关注Cheekysoft's question关于在重新采样后保留透明度......但它不起作用......他的两个要点是:

returns an image identifier representing a black image of the specified size.

我发现如果在调整大小/重新取样之前放置imagealphablending( $targetImage, false ); imagesavealpha( $targetImage, true ); ,它会透明地显示......这就是我想要的......但是在重新取样之后却没有。

Thumbnailer.php代码:

$img = imagecreatefrompng($image_file);

有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

在重新取样/调整图像大小之前,您需要在目标图像上调用imagealphablending():

//copy and resize old image to new image
imagealphablending($tmp_img, false);
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// ...

答案 1 :(得分:1)

创建图像后,您将alphablending和traparent代码放在下面。只需将它们放在createresample行和透明图像前面,图像由imagecreatefrompng创建。

imagealphablending( $tmp_img, false );
imagesavealpha( $tmp_img, true );
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

或者您可以尝试以下

$img = ImageCreateFromPNG($image_file);
$tmp_img = imagecreatetruecolor($new_width,$new_height);
imagecolortransparent($tmp_img, imagecolorallocate($tmp_img, 0, 0, 0));
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);