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 date与gmdate的获取日期的区别
Feb 08 PHP
php 读取文件乱码问题
Feb 20 PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
PHP中的类型约束介绍
May 11 PHP
ThinkPHP路由详解
Jul 27 PHP
深入浅析Yii admin的权限控制
Aug 31 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
php表单习惯用的正则表达式
Oct 11 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 PHP
ThinkPHP3.2框架操作Redis的方法分析
May 05 PHP
Laravel框架源码解析之反射的使用详解
May 14 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输出数组中重名的元素的几种处理方法
2012/09/05 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
如何用JavaScript定义一个类
2014/09/12 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
2015/06/19 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
js实现百度淘宝搜索功能
2020/02/17 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
python如何修改装饰器中参数
2018/03/20 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
python实现ip代理池功能示例
2019/07/05 Python
Python分割训练集和测试集的方法示例
2019/09/19 Python
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
高中班长自我鉴定
2013/12/20 职场文书
餐厅筹备计划书
2014/04/25 职场文书
金融系应届毕业生求职信
2014/05/26 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
成都人事代理协议书
2014/10/25 职场文书
公司奖励通知
2015/04/21 职场文书
工程服务质量承诺书
2015/04/29 职场文书