如何使用干预图像从图像中删除白色背景

时间:2016-08-15 21:25:04

标签: php imagemagick laravel-5.1 intervention

用户上传的图像文件,手写为黑色墨水。我想删除背景并将手写保留为新的.png图像。使用干预图像有一个名为trim()的功能,听起来应该这样做,但没有给出预期的结果。

代码:

$file = $request->file('employee_signature');

$name = $employee->givenname.'_'.$employee->surname.'_Signature.png';

$new_image = Intervention::make($file)->trim()->save('images/signatures/'.$name);

return $new_image;

$new_image应该返回一个名为" First_Last_Signature.png"并且只有黑色笔迹。使用我当前的代码,它不会修剪白色背景。我可以确认它正在处理中,因为当我上传.jpg时,它会在指定目录中保存为.png。

有一条关于GitHub的建议说fill()应该有效,但我无法理解。

这里有一个关于SOF的解决方案,它完全符合我的要求,但没有使用干预图像库:LINK

我目前正在使用Imagemagick,但GD库也可以使用,虽然Intervention Image文档确实说GD会使用大量资源。

2 个答案:

答案 0 :(得分:1)

有一个解决方案,希望对您有所帮助。

$file = $request->file('employee_signature');

$name = $employee->givenname.'_'.$employee->surname.'_Signature.png';

$mask = Intervention::make($file)
    ->greyscale(); // greyscale the signature image
    ->contrast(100); // increase the contrast to reach pure black and white
    ->contrast(50); // more contrast to ensure!
    ->trim('top-left', null, 40); // it's better to set a tolerance for trim()
    ->invert(); // invert it to use as a mask

$new_image = Intervention::canvas($mask->width(), $mask->height(), '#000000');
    ->mask($mask)
    ->save('images/signatures/'.$name);

return $new_image;

答案 1 :(得分:0)

好吧,因为我使用的是intevention 1.x,并且找不到缩放后的jpg的解决方案 我想把它贴出来,现在我终于找到了解决黑色背景的方法。

我找到了以下代码:

$ img-> fill('#ffffff',0,0); //用颜色填充图像

对我来说,缩小后,它形成了透明的环境,而不是黑色,是白色的。

我注意到它不能100%工作(有时会变白),但在大多数情况下都可以工作。所以也许其他人也需要这种解决方案。