当图像内部存在背景颜色(不仅仅是边框)时,Imagemagick trimimage功能也会修剪
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当图像内部存在背景颜色(不仅仅是边框)时,Imagemagick trimimage功能也会修剪相关的知识,希望对你有一定的参考价值。
因此,我尝试使用imagemagick trimimage函数(php)根据背景颜色修剪图像的边框。下面是我正在尝试做什么以及问题是什么的演示。
并运行以下代码:
$canvas->setBackgroundColor('#ffffff');
$quantumRange = $canvas->getQuantumRange();
$canvas->trimImage(0.3 * $quantumRange['quantumRangeLong']);
$canvas->setImagePage(0, 0, 0, 0);
现在,形成我所理解的,修剪图像应采用背景颜色并从外部修剪它,并且只有当图像的外边缘(边框)与此颜色匹配时。
所以,要么我理解修剪错误,要么我在实施中遗漏了一些东西。此外,玩弄模糊值不是一种选择。在某些时候它会停止修剪蓝色边框,但此时如果有外边框它也不会修剪得足够,因为我需要一个足够高的值来消除光影或压缩瑕疵。
所以实际问题是:1。当外边框颜色与背景颜色匹配时,是否有办法仅从外部裁剪图像?也许我错过了什么。 2.你能推荐另一种方法吗?
编辑:@ fmw42在下面回答之后,我仔细研究了边缘检测究竟是什么以及它是如何工作的。我的假设是,imagemagick会查看图像的边框,并根据给定的背景颜色剪切它们,这是错误的。为了更好地理解,请检查边缘检测的工作原理:https://en.wikipedia.org/wiki/Edge_detection
谢谢。
只有当侧面颜色在模糊值范围内时,Imagemagick -trim才会从每侧修剪。你的白色背景什么也没做。 -trim函数查看边缘的颜色并向内修剪,直到边缘的行和列超过边缘颜色的模糊值。它会查看角落颜色以确定是否修剪。在您的第一种情况下,您有3个白色角落。因此它将修剪顶部和右侧的白色。在你的第二种情况下,你现在有3个蓝色角落。因此,它将在顶部和右侧向内修剪以去除一些蓝色。
我想你想要做的是在背景颜色的图像周围放一个1像素的边框。在这种情况下,你想要白色。
输入1:
convert image1.jpg -bordercolor white -border 1 -fuzz 30% -trim +repage image_trim.jpg
注意,30%相当于0.3 *量子范围
镜像2:
convert image2.jpg -bordercolor white -border 1 -fuzz 30% -trim +repage image2a_trim.jpg
在不添加白色边框的情况下,-trim将蓝色视为3个边角的边框。所以它会修剪蓝色。
convert image2.jpg -fuzz 30% -trim +repage image2b_trim.jpg
如果将模糊值增加到50%,它将更加明显并且对企鹅进行修剪。
convert image2.jpg -fuzz 30% -trim +repage image2c_trim.jpg
以上是关于当图像内部存在背景颜色(不仅仅是边框)时,Imagemagick trimimage功能也会修剪的主要内容,如果未能解决你的问题,请参考以下文章