php 处理透明背景的图片时的问题
2013-07-31 16:52
417 查看
PHP图象处理之透明背景的gif和png图片的一些问题
1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况。
解决方法:使用 imagesavealpha ($image,true),此函数是针对png格式的.
注意一点:不是所有的浏览器都支持 alpha 通道,如果在你的浏览器上碰到问题,试着用兼容 alpha 通道的浏览器(例如最新版的 Mozilla)重新加载脚本。
经测试,在IE中显示效果不理想(但图片仍然是透明的,保存下来看下就知道),背景变成了灰色.
2,在处理(比如缩小,剪切)有透明背景的gif和png图片然后输出时,图片透明部分变成了黑色。
示例代码如下:
效果是图片背景变成了黑色。
解决办法:使用imagecreate()而不是用imagecreatetruecolor()创建图片。
因为imagecreatetruecolor()返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像,
看下帮助手册就知道了。
但这种方法仍然有bug,用于png时,png有部分颜色失去,变成了透明。
解决办法:未知,有知道的告诉我一声,在下先谢谢了。
3.php生产透明背景图片
不过现在的方法还不是太理想。
2的bug解决办法
以下是处理透明的3个必须了解的函数
imagealphablending
此函数,开启或关闭一个真彩色图像资源的混色模式。开启与关闭混合模式有什么区别呢?如果不涉及透明度的问题,两个模式没什么区别,但是如果是在一张画布上画一条透明颜色的线,不同的混合模式将出现不同的效果,如果混合模式开启,则透明线的颜色会与原背景中的颜色叠加,计算出新的颜色,显示出来,如果混合模式关闭,则透明线的颜色直接覆盖到画布中对应位置的颜色值。
简单来说,开启混合模式,颜色叠加,关闭混合模式,颜色覆盖。
imagecolorallocatealpha
类似于拾色器的功能,就是生成一个颜色, 的行为和 imagecolorallocate 相同,但多了一个额外的透明度参数 alpha,其值从 0 到 127。0 表示完全不透明,127 表示完全透明。
imagesavealpha
设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息,如果你想保存一个透明的png图标,这个函数是必要的。
给个生成300×300完全透明PNG的例子,
另一种建立透明PNG的方法 , 使用
1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况。
解决方法:使用 imagesavealpha ($image,true),此函数是针对png格式的.
1 | <?php |
2 | $im =imagecreatefrompng( "demo_1.png" ); |
3 | imagesavealpha( $im , true); //设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息。 |
4 | header( 'Content-type: image/png' ); |
5 | imagepng( $im ); |
6 | imagedestroy( $im ); |
7 | ?> |
经测试,在IE中显示效果不理想(但图片仍然是透明的,保存下来看下就知道),背景变成了灰色.
2,在处理(比如缩小,剪切)有透明背景的gif和png图片然后输出时,图片透明部分变成了黑色。
示例代码如下:
01 | <?php |
02 | $size = 300; |
03 | $image =imagecreatetruecolor( $size , $size ); //创建图片 |
04 | $back =imagecolorallocatealpha( $image , //加透明颜色,其实好象没什么效果。-_-! |
05 |
06 | //读取图片 |
07 | $im =imagecreatefrompng( "demo_1.png" ); |
08 | imagecopyresampled( $image , $im ,10,20,0,0,128,128,128,128); //合拼图片 |
09 | header( 'Content-type: image/png' ); |
10 | imagepng( $image ); |
11 | imagedestroy( $image ); |
12 | ?> |
解决办法:使用imagecreate()而不是用imagecreatetruecolor()创建图片。
因为imagecreatetruecolor()返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像,
看下帮助手册就知道了。
但这种方法仍然有bug,用于png时,png有部分颜色失去,变成了透明。
解决办法:未知,有知道的告诉我一声,在下先谢谢了。
3.php生产透明背景图片
1 | <?php |
2 | $wite = ImageColorAllocate( $ni ,255,255,255); //填充的背景色你可以重新指定,我用的是白色 |
3 | imagefilledrectangle( $ni , $dstW , $dstH , $wite ); |
4 | ImageColorTransparent( $ni , $wite ); |
5 | ?> |
2的bug解决办法
01 | <?php |
02 | //创建透明画布 |
03 | $im_out =imagecreatetruecolor( $imgcreat_x , $imgcreat_y ); |
04 | imagealphablending( $im_out , true); |
05 | imagesavealpha( $im_out , true); |
06 | $trans_colour = imagecolorallocatealpha( $im_out , |
07 | imagefill( $im_out , $trans_colour ); |
08 | ImageCopyResized( $im_out , $im , $img_x , $img_y , $img [0], $img [1]); |
09 | imagepng( $im_out ); |
10 | ?> |
imagealphablending
此函数,开启或关闭一个真彩色图像资源的混色模式。开启与关闭混合模式有什么区别呢?如果不涉及透明度的问题,两个模式没什么区别,但是如果是在一张画布上画一条透明颜色的线,不同的混合模式将出现不同的效果,如果混合模式开启,则透明线的颜色会与原背景中的颜色叠加,计算出新的颜色,显示出来,如果混合模式关闭,则透明线的颜色直接覆盖到画布中对应位置的颜色值。
简单来说,开启混合模式,颜色叠加,关闭混合模式,颜色覆盖。
imagecolorallocatealpha
类似于拾色器的功能,就是生成一个颜色, 的行为和 imagecolorallocate 相同,但多了一个额外的透明度参数 alpha,其值从 0 到 127。0 表示完全不透明,127 表示完全透明。
imagesavealpha
设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息,如果你想保存一个透明的png图标,这个函数是必要的。
给个生成300×300完全透明PNG的例子,
1 | <?PHP |
2 | $block =imagecreatetruecolor(300,300); //建立一个画布 |
3 | $c =imagecolorallocatealpha( $block , //拾取一个完全透明的颜色 |
4 | imagealphablending( $block ,false); //关闭混合模式,以便透明颜色能覆盖原画布 |
5 | imagefill( $block , $c ); //填充 |
6 | imagesavealpha( $block ,true); //设置保存PNG时保留透明通道信息 |
7 | imagepng( $block , 'e.png' ); //生成图片 |
8 | ?> |
imagecolortransparent设置图片的透明色属性,也就是把图片上的某个颜色设置成透明色。
1 | <?PHP |
2 | $block = imagecreatetruecolor(300 ,300); //建立一个真彩色画布 |
3 | $white = imagecolorallocate( $block , //拾取白色 |
4 | imagefill( $block , $white ); //把画布染成白色 |
5 | imagecolortransparent( $block , $white ); //把图片中白色设置为透明色 |
6 | //imagesavealpha($block |
7 | imagepng( $block , 'e.png' ); //生成图片 |
8 | ?> |
相关文章推荐
- php 处理透明背景的图片时的问题
- php 压缩各格式图片,处理png格式图片背景黑色问题
- CodeIgniter中PNG图片处理背景不透明问题的解决办法
- 处理IE6下PNG图片透明背景问题
- 用PHP的GD库把图片的背景替换成透明背景
- iOS-BUG整理 背景图片为透明时,解决控件透明的问题
- DD_belatedPNG.js解决透明PNG图片背景灰色问题
- PHP图片处理之图片背景、画布操作
- 透明背景图片处理
- PHP图片处理—PNG透明缩放并生成灰图
- PHP添加PNG图片背景透明水印
- 以Png图片在网页中背景透明问题展开谈png图片格式问题
- php处理透明png图片
- Java将图片处理成背景透明的圆形图片
- DD_belatedPNG.js解决透明PNG图片背景灰色问题(DD_belatedPNG.js下载)
- Android部分机型(vivo、乐视、部分红米)对GIF透明背景图片显示白色问题分析
- wince 图片背景透明处理
- 【转】CSS解决IE6下PNG图片背景不透明的问题
- java的图片背景透明及透明度处理