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

发布于 2022-08-24 11:51:25 字数 972 浏览 18 评论 0

把一张图片(根据指定的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));                
            }
        }
    }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

丑丑阿 2022-08-31 11:51:25

时隔4年,我来贡献一个面向对象的。哈哈

图片描述图片描述

/**
 * Created by PhpStorm.
 * User: shellus
 * Date: 2016-12-01
 * Time: 23:12
 */


require 'vendor/autoload.php';
// import the Intervention Image Manager Class
use Intervention\Image\ImageManager;

// create an image manager instance with favored driver
$manager = new ImageManager(array('driver' => 'gd'));

$img =  $manager->make('1.jpg');

for ($y = 0; $y < $img->height(); $y++)
{
    for ($x = 0; $x < $img->width(); $x++)
    {
        $c = $img -> pickColor($x, $y, 'array');

        if(abs($c[0] - 205) < 50  && abs($c[1] - 223) < 50 && abs($c[2] - 211) < 50 ){
            $c[0] = $c[1] = $c[2] = 255;
            $img -> pixel($c, $x, $y);
        }

    }
}
$img -> save();
浮云落日 2022-08-31 11:51:25

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文