首页 > 编程 > PHP > 正文

图片处理 - PHP 怎么去掉一张图片里的一些颜色,让其变成透明?

2020-03-22 18:29:56
字体:
来源:转载
供稿:网友
把一张图片(根据指定的RGB颜色范围)透明化。但是实际处理当中,下面的代码值移除了白色,请教是怎么回事?

$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));                            }        }    }}

回复内容:

把一张图片(根据指定的RGB颜色范围)透明化。但是实际处理当中,下面的代码值移除了白色,请教是怎么回事?

$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));                            }        }    }}

请不要用jpg,因为jpg不支持透明所以变白了,用imagecreatetruecolor或是imagecreatefrompng

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表