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


Posted in PHP onDecember 10, 2018

先看下面一段代码,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 相关文章推荐
[原创]效率较高的php下读取文本文件的代码
Jul 02 PHP
php 魔术函数使用说明
Feb 21 PHP
php Smarty 字符比较代码
Feb 27 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
Jul 22 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
PHP获取photoshop写入图片文字信息的方法
Mar 31 PHP
JavaScript与HTML结合的基本使用方法整理
Oct 12 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
PHP中file_exists使用中遇到的问题小结
Apr 05 PHP
Yii2 批量插入、更新数据实例
Mar 15 PHP
PHP的curl函数的用法总结
Feb 14 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 #PHP
PHP聊天室简单实现方法详解
Dec 08 #PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 #PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 #PHP
Laravel框架定时任务2种实现方式示例
Dec 08 #PHP
PHP单例模式模拟Java Bean实现方法示例
Dec 07 #PHP
thinkPHP框架实现的简单计算器示例
Dec 07 #PHP
You might like
thinkPHP分页功能实例详解
2017/05/05 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
js滚动条多种样式,推荐
2007/02/05 Javascript
JavaScript中常见陷阱小结
2010/04/27 Javascript
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
Vue项目中如何引入icon图标
2018/03/28 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
详解Python中expandtabs()方法的使用
2015/05/18 Python
Python随手笔记之标准类型内建函数
2015/12/02 Python
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
python自动发送邮件脚本
2018/06/20 Python
python查看模块安装位置的方法
2018/10/16 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
css3 自定义字体font-face使用介绍
2014/05/14 HTML / CSS
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
俄罗斯在线服装店:STOLNIK
2021/03/07 全球购物
九年级数学教学反思
2014/02/02 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
护士个人自我鉴定
2014/03/24 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
出租房屋协议书
2014/09/14 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
运动会广播稿200字
2014/10/18 职场文书