1

用户上传了带有黑色墨水笔迹的图像文件。我想删除背景并将笔迹保留为新的 .png 图像。使用 Intervention Image 有一个名为的功能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 将使用大量资源。

4

3 回答 3

2

有一个解决方案,希望这会有所帮助:

$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;
于 2018-11-05T05:33:17.027 回答
1

使用 LunaPic 上的透明工具可能会很幸运。您只需单击要删除的背景颜色,然后根据需要进一步调整清晰度。http://www167.lunapic.com/editor/?action=transparent

于 2016-08-15T21:28:53.877 回答
0

好的,因为我使用的是 intevention 1.x 并且找不到我的缩放 jpg 的解决方案我想发布它现在听到我终于找到了黑色背景的解决方案。

我找到了这段代码:

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

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

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

于 2020-01-14T07:14:53.190 回答