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制作简单的内容采集器的原理分析
Oct 01 PHP
令PHP初学者头疼十四条问题大总结
Nov 12 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 PHP
PHP类的反射用法实例
Nov 03 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
Jun 10 PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 PHP
laravel 根据不同组织加载不同视图的实现
Oct 14 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
Oct 22 PHP
php实现微信小程序授权登录功能(实现流程)
Nov 13 PHP
设定php简写功能的方法
Nov 28 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
Nov 27 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
PHP Smarty模版简单使用方法
2016/03/30 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
用JavaScript隐藏控件的方法
2009/09/21 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
js实现密码强度检验
2017/01/15 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
python smtplib发送带附件邮件小程序
2018/05/22 Python
python 获取字符串MD5值方法
2018/05/29 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
python manage.py runserver流程解析
2019/11/08 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
python的slice notation的特殊用法详解
2019/12/27 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
广州一家公司的.NET面试题
2016/06/11 面试题
校领导推荐信
2013/11/01 职场文书
工作决心书范文
2014/03/11 职场文书
政府门卫岗位职责
2014/04/29 职场文书
中职毕业生自我鉴定范文(3篇)
2014/09/28 职场文书
考察邀请函范文
2015/01/31 职场文书
财务人员入职担保书
2015/09/22 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书