首页 > 代码库 > 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);
   ?>
   注意一点:不是所有的浏览器都支持 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);
  ?>

  效果是图片背景变成了黑色。
  解决办法:使用imagecreate()而不是用imagecreatetruecolor()创建图片。
  因为imagecreatetruecolor()返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像,
  看下帮助手册就知道了。

  但这种方法仍然有bug,用于png时,png有部分颜色失去,变成了透明。
  解决办法:未知,有知道的告诉我一声,在下先谢谢了。

3.php生产透明背景图片

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

 

不过现在的方法还不是太理想。继续整理中~~~~