用户上传的图像文件,手写为黑色墨水。我想删除背景并将手写保留为新的.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会使用大量资源。
答案 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%工作(有时会变白),但在大多数情况下都可以工作。所以也许其他人也需要这种解决方案。