替换干预图像中的颜色

Replace a color in intervention image

我想通过将用户上传的图像与背景颜色合并,将其转换为页面背景。

为了达到这种效果,我想将图像设置为灰度,然后替换颜色以匹配我的背景颜色(橙色),所以我想替换颜色(黑色匹配我的背景颜色,然后每个灰度级褪色到另一个更清晰的值)。

grescale()方法可以,但不知道如何替换。我尝试了着色功能,但它似乎只会使图像变亮太多,即使我之前使用 contrast() 使图像变暗也是如此。 LimitColors() 也不起作用。

怎样才能达到我想要的效果?

我设法得到我想要的显示,使用这个方法:

  • 创建一个与我的主图像大小相同的图像,并填充我想要的颜色
  • 使用我的主图作为第一张图的蒙版
  • 另存为 PNG(我强调这里是因为我的测试不起作用,因为我使用的是默认的 JPEG 导出)。

使用 intervention's filters 使其更易于在其他地方使用,这是我的结果:

<?php

namespace App\ImageFilters;

use Intervention\Image\Filters\FilterInterface;
use Intervention\Image\Image;
use Intervention\Image\ImageManager;

class MyFilter implements FilterInterface
{
    /** @var ImageManager */
    private $imageManager;

    const BACKGROUND_COLOR = '#FCB65B';

    public function __construct()
    {
        $this->imageManager = new ImageManager();
    }

    public function applyFilter(Image $image)
    {
        $height = $image->getHeight();
        $width = $image->getWidth();

        return $this->imageManager
            ->canvas($width, $height)
            ->fill(self::BACKGROUND_COLOR)
            ->mask($image, false);
    }

}

在我的图片管理脚本中是这样使用的:

$image = $image->filter(New MyFilter());

发帖前编辑:

  • 我试图用 greyscale() 将主图像转换为黑白,但在省略它之后碰巧对蒙版功能没有影响。
  • 我在将主图像用作蒙版之前稍微调亮了一点,我认为它最适合我的目的。

    /* 用这个替换掩码调用 */ ->mask($image->brightness(25), false);