PHP Determining Background Color of Image

Bri*_*ica 5 php image

我一直在看 CustomInk 的设计实验室,我很好奇他们如何决定什么颜色是背景颜色。例如,如果我上传 Facebook 徽标,他们决定从图像中删除蓝色。

在此处输入图片说明

但是如果我上传一张白色背景的苹果图片,那么他们会以类似的方式删除白色。(即使白色背景不是主色)

在 PHP 中使用 ImageMagick,我怎样才能完成这个任务?

Bri*_*ica 6

我找到了在图像中查找背景颜色并使用 PHP 和 Imagick 将其删除的解决方案。我没有使用边缘,而是决定使用角落来确定要删除哪些颜色,这似乎在大多数情况下都有效。下面是一些结果。

在此处输入图片说明

我能够变成这个

在此处输入图片说明

(背景图片是我在谷歌上找到的一种白色编织材料的纹理)。但这似乎也可以很好地处理渐变背景。

在此处输入图片说明

这是一张 Vette 的照片,首先是原始的,然后将所有角落的颜色更改为透明,最后是从角落开始使用填充的照片。

$Image = new Imagick('vette.jpg');
$BackgroundColors = array(
    'TopLeft' => array(1, 1),
    'TopRight' => array($Image->getimagewidth(), 1),
    'BottomLeft' => array(1, $Image->getimageheight()),
    'BottomRight' => array($Image->getimagewidth(), $Image->getimageheight())
);

foreach ($BackgroundColors as $Key => $BG) {
    $pixel = $Image->getImagePixelColor($BG[0], $BG[1]);
    $colors = $pixel->getColor();
    $ExcludedColors[] = rgb2hex(array_values($colors));
    $Image->floodfillPaintImage('none', 9000, $pixel, $BG[0] - 1, $BG[1] - 1, false);
    //Comment the line above and uncomment the below line to achieve the effects of the second Vette
    //$Image->transparentPaintImage($pixel, 0, 9000, false);
}
$Image->writeImage("vette-no_background.png");
Run Code Online (Sandbox Code Playgroud)