php 网页 透明背景图片,php 处理透明背景的图片时的问题

PHP图象处理之透明背景的gif和png图片的一些问题

1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况。

解决方法:使用 imagesavealpha ($image, true),此函数是针对png格式的.

PHP

$im=imagecreatefrompng("demo_1.png");

imagesavealpha($im, true);//设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息。

header('Content-type: image/png');

imagepng($im);

imagedestroy($im);

?>

1

2

3

4

5

6

7

$im=imagecreatefrompng("demo_1.png");

imagesavealpha($im,true);//设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息。

header('Content-type: image/png');

imagepng($im);

imagedestroy($im);

?>

注意一点:不是所有的浏览器都支持 alpha 通道,如果在你的浏览器上碰到问题,试着用兼容 alpha 通道的浏览器(例如最新版的 Mozilla)重新加载脚本。

经测试,在IE中显示效果不理想(但图片仍然是透明的,保存下来看下就知道),背景变成了灰色.

2,在处理(比如缩小,剪切)有透明背景的gif和png图片然后输出时,图片透明部分变成了黑色。

示例代码如下:

PHP

$size = 300;

$image=imagecreatetruecolor($size, $size);//创建图片

$back =imagecolorallocatealpha($image, 255, 255, 255,127);//加透明颜色,其实好象没什么效果。-_-!

//读取图片

$im=imagecreatefrompng("demo_1.png");

imagecopyresampled($image,$im,10,20,0,0,128,128,128,128);//合拼图片

header('Content-type: image/png');

imagepng($image);

imagedestroy($image);

?>

1

2

3

4

5

6

7

8

9

10

11

12

$size=300;

$image=imagecreatetruecolor($size,$size);//创建图片

$back=imagecolorallocatealpha($image,255,255,255,127);//加透明颜色,其实好象没什么效果。-_-!

//读取图片

$im=imagecreatefrompng("demo_1.png");

imagecopyresampled($image,$im,10,20,0,0,128,128,128,128);//合拼图片

header('Content-type: image/png');

imagepng($image);

imagedestroy($image);

?>

效果是图片背景变成了黑色。

解决办法:使用imagecreate()而不是用imagecreatetruecolor()创建图片。

因为imagecreatetruecolor()返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像,

看下帮助手册就知道了。

但这种方法仍然有bug,用于png时,png有部分颜色失去,变成了透明。

解决办法:未知,有知道的告诉我一声,在下先谢谢了。

3.php生产透明背景图片

PHP

$wite = ImageColorAllocate($ni,255,255,255);//填充的背景色你可以重新指定,我用的是白色

imagefilledrectangle($ni, 0, 0, $dstW, $dstH, $wite);

ImageColorTransparent($ni, $wite);

?>

1

2

3

4

5

$wite=ImageColorAllocate($ni,255,255,255);//填充的背景色你可以重新指定,我用的是白色

imagefilledrectangle($ni,0,0,$dstW,$dstH,$wite);

ImageColorTransparent($ni,$wite);

?>

不过现在的方法还不是太理想。

2的bug解决办法

PHP

//创建透明画布

$im_out =imagecreatetruecolor($imgcreat_x, $imgcreat_y);

imagealphablending($im_out, true);

imagesavealpha($im_out, true);

$trans_colour = imagecolorallocatealpha($im_out, 0, 0, 0, 127);

imagefill($im_out, 0, 0, $trans_colour);

ImageCopyResized($im_out, $im, 0,0, 0, 0, $img_x, $img_y, $img[0], $img[1]);

imagepng($im_out);

?>

1

2

3

4

5

6

7

8

9

10

//创建透明画布

$im_out=imagecreatetruecolor($imgcreat_x,$imgcreat_y);

imagealphablending($im_out,true);

imagesavealpha($im_out,true);

$trans_colour=imagecolorallocatealpha($im_out,0,0,0,127);

imagefill($im_out,0,0,$trans_colour);

ImageCopyResized($im_out,$im,0,0,0,0,$img_x,$img_y,$img[0],$img[1]);

imagepng($im_out);

?>

以下是处理透明的3个必须了解的函数

imagealphablending

此函数,开启或关闭一个真彩色图像资源的混色模式。开启与关闭混合模式有什么区别呢?如果不涉及透明度的问题,两个模式没什么区别,但是如果是在一张画布上画一条透明颜色的线,不同的混合模式将出现不同的效果,如果混合模式开启,则透明线的颜色会与原背景中的颜色叠加,计算出新的颜色,显示出来,如果混合模式关闭,则透明线的颜色直接覆盖到画布中对应位置的颜色值。

简单来说,开启混合模式,颜色叠加,关闭混合模式,颜色覆盖。

imagecolorallocatealpha

类似于拾色器的功能,就是生成一个颜色, 的行为和 imagecolorallocate 相同,但多了一个额外的透明度参数 alpha,其值从 0 到 127。0 表示完全不透明,127 表示完全透明。

imagesavealpha

设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息,如果你想保存一个透明的png图标,这个函数是必要的。

给个生成300×300完全透明PNG的例子,

PHP

$block=imagecreatetruecolor(300,300);//建立一个画布

$c=imagecolorallocatealpha($block , 0 , 0 , 0 ,127);//拾取一个完全透明的颜色

imagealphablending($block ,false);//关闭混合模式,以便透明颜色能覆盖原画布

imagefill($block , 0 , 0, $c);//填充

imagesavealpha($block ,true);//设置保存PNG时保留透明通道信息

imagepng($block ,'e.png');//生成图片

?>

1

2

3

4

5

6

7

8

$block=imagecreatetruecolor(300,300);//建立一个画布

$c=imagecolorallocatealpha($block,0,0,0,127);//拾取一个完全透明的颜色

imagealphablending($block,false);//关闭混合模式,以便透明颜色能覆盖原画布

imagefill($block,0,0,$c);//填充

imagesavealpha($block,true);//设置保存PNG时保留透明通道信息

imagepng($block,'e.png');//生成图片

?>

另一种建立透明PNG的方法 , 使用imagecolortransparent设置图片的透明色属性,也就是把图片上的某个颜色设置成透明色。

PHP

$block= imagecreatetruecolor(300 ,300);//建立一个真彩色画布

$white= imagecolorallocate($block , 255 , 255 ,255);//拾取白色

imagefill($block , 0 , 0, $white);//把画布染成白色

imagecolortransparent($block ,$white );//把图片中白色设置为透明色

//imagesavealpha($block , false);

imagepng($block ,'e.png');//生成图片

?>

1

2

3

4

5

6

7

8

$block=imagecreatetruecolor(300,300);//建立一个真彩色画布

$white=imagecolorallocate($block,255,255,255);//拾取白色

imagefill($block,0,0,$white);//把画布染成白色

imagecolortransparent($block,$white);//把图片中白色设置为透明色

//imagesavealpha($block , false);

imagepng($block,'e.png');//生成图片

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值