• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    php 处理png图片白色背景色改为透明色的实例代码

    先看下面一段代码,php 处理png图片白色背景色改为透明色

    function pngMerge($o_pic,$out_pic){
     $begin_r = 255;
     $begin_g = 250;
     $begin_b = 250;
     list($src_w, $src_h) = getimagesize($o_pic);// 获取原图像信息 宽高
     $src_im = imagecreatefrompng($o_pic); //读取png图片
     print_r($src_im);
     imagesavealpha($src_im,true);//这里很重要 意思是不要丢了$src_im图像的透明色
     $src_white = imagecolorallocatealpha($src_im, 255, 255, 255,127); // 创建一副白色透明的画布
     for ($x = 0; $x  $src_w; $x++) {
      for ($y = 0; $y  $src_h; $y++) {
        $rgb = imagecolorat($src_im, $x, $y);
        $r = ($rgb >> 16)  0xFF;
        $g = ($rgb >> 8)  0xFF;
        $b = $rgb  0xFF;
        if($r==255  $g==255  $b == 255){
        imagefill($src_im,$x, $y, $src_white); //填充某个点的颜色
        imagecolortransparent($src_im, $src_white); //将原图颜色替换为透明色
        }
        if (!($r = $begin_r  $g = $begin_g  $b = $begin_b)) {
         imagefill($src_im, $x, $y, $src_white);//替换成白色
         imagecolortransparent($src_im, $src_white); //将原图颜色替换为透明色
        }
      }
     }
     $target_im = imagecreatetruecolor($src_w, $src_h);//新图
     imagealphablending($target_im,false);//这里很重要,意思是不合并颜色,直接用$target_im图像颜色替换,包括透明色;
     imagesavealpha($target_im,true);//这里很重要,意思是不要丢了$target_im图像的透明色;
     $tag_white = imagecolorallocatealpha($target_im, 255, 255, 255,127);//把生成新图的白色改为透明色 存为tag_white
     imagefill($target_im, 0, 0, $tag_white);//在目标新图填充空白色
     imagecolortransparent($target_im, $tag_white);//替换成透明色
     imagecopymerge($target_im, $src_im, 0, 0, 0, 0, $src_w, $src_h, 100);//合并原图和新生成的透明图
     imagepng($target_im,$out_pic);
     return $out_pic;
    }
    $o_pic = '1.png';
    $name = pngMerge($o_pic,'aaaa.png');
    print_r($name);

    补充:用PHP的GD库把图片的背景替换成透明背景

    之前写个功能用PHP把图片的背景弄成透明,之留下文字(黑色的),我也在百度上找,也试过别人的代码。大多数代码的思路都是这样:

    生成新的画布,读取源图片每个坐标的颜色,不符合要求的用imagecolortransparent()函数将该颜色替换成透明的。

    $o_pic = '1.jpg';
    //要处理的色阶起始值
    $begin_r = 215;
    $begin_g = 215;
    $begin_b = 215;
    list($src_w,$src_h,$src_type) = getimagesize($o_pic);// 获取原图像信息
    $file_ext = get_ext($o_pic);//获取扩展名
    $target_im = imagecreatetruecolor($src_w,$src_h);//新图
    if($file_ext == 'jpg') //转换JPG 开始
    {
      $src_im = ImageCreateFromJPEG($o_pic);
      imagecopymerge($target_im,$src_im,0,0,0,0,$src_w,$src_h,100);
      for($x = 0; $x  $src_w; $x++)
      {
        for($y = 0; $y  $src_h; $y++)
        {
          $rgb = imagecolorat($src_im, $x, $y);
          $r = ($rgb >> 16)  0xFF;
          $g = ($rgb >> 8)  0xFF;
          $b = $rgb  0xFF;
          if($r > $begin_r  $g > $begin_g  $b > $begin_b ){  
            imagecolortransparent($target_im, imagecolorallocate($target_im,$r, $g, $b));        
          }
        }
      }
    }

    但是用了这个思路,图片的背景一直都不能便透明,改了好多次。
    后来发现只有最后一次imagecolortransparent()有效果,前面都都被覆盖了。

    把思路改了下,把不要的颜色先统一转换成白色,最后再将白色替换成透明

    $begin_r = 98;
    $begin_g = 98;
    $begin_b = 98;
    list($src_w, $src_h) = getimagesize($o_pic);// 获取原图像信息
    $src_im = imagecreatefromjpeg($o_pic);
    //imagecopymerge($target_im, $src_im, 0, 0, 0, 0, $src_w, $src_h, 100);
    //imagecopyresampled($target_im, $src_im, 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h);
    $i = 0;
    $src_white = imagecolorallocate($src_im, 255, 255, 255);
    for ($x = 0; $x  $src_w; $x++) {
      for ($y = 0; $y  $src_h; $y++) {
       $rgb = imagecolorat($src_im, $x, $y);
       $r = ($rgb >> 16)  0xFF;
       $g = ($rgb >> 8)  0xFF;
       $b = $rgb  0xFF;
       if($r==255  $g==255  $b == 255){
         $i ++;
         continue;
       }
       if (!($r = $begin_r  $g = $begin_g  $b = $begin_b)) {
         imagefill($src_im, $x, $y, $src_white);//替换成白色
       }
      }
    }
    $target_im = imagecreatetruecolor($src_w, $src_h);//新图
    $tag_white = imagecolorallocate($target_im, 255, 255, 255);
    imagefill($target_im, 0, 0, $tag_white);
    imagecolortransparent($target_im, $tag_white);
    imagecopymerge($target_im, $src_im, 0, 0, 0, 0, $src_w, $src_h, 100);

    总结

    以上所述是小编给大家介绍的php 处理png图片白色背景色改为透明色的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • PHP简单实现图片格式转换(jpg转png,gif转png等)
    • PHP中使用Imagick读取pdf并生成png缩略图实例
    • PHP使用imagick读取PDF生成png缩略图的两种方法
    • PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
    • php缩放gif和png图透明背景变成黑色的解决方法
    • PHP实现生成透明背景的PNG缩略图函数分享
    • PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
    • PHP实现对png图像进行缩放的方法(支持透明背景)
    • 支持png透明图片的php生成缩略图类分享
    • PHP添加PNG图片背景透明水印操作类定义与用法示例
    • php 实现svg转化png格式的方法分析
    上一篇:php高清晰度无损图片压缩功能的实现代码
    下一篇:yii2 url重写并隐藏index.php方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    php 处理png图片白色背景色改为透明色的实例代码 php,处理,png,图片,白色,背,