php 与IMG_CROP_SIDES相比,IMG_CROP_THRESHOLD如何工作?

r9f1avp5  于 2023-06-20  发布在  PHP
关注(0)|答案(2)|浏览(136)

IMG_CROP_SIDES和IMG_CROP_THRESHOLD有什么区别?
我一直在尝试粗略地裁剪文档照片的背景,但无论哪种方式,我都无法得到我的目标结果。
另外,我从https://www.php.net/manual/en/function.imagecropauto.php中获取了null, 16777215,但老实说,我不明白它们实际上是做什么的。我本来希望使用像0.1, #FFFFFF这样的东西来裁剪白色或接近白色的背景。null, 16777215是什么意思

$cropped = imagecropauto($img, IMG_CROP_THRESHOLD, null, 16777215);
$cropped = imagecropauto($img, IMG_CROP_SIDES);
jdgnovmf

jdgnovmf1#

IMG_CROP_SIDES的工作原理是自动计算图像边界周围像素的平均颜色,并裁剪掉该值50%以内的任何内容。-

更正

IMG_CROP_SIDES使用gdGuessBackgroundColorFromCorners,它本质上是找到从角颜色到现有调色板中最接近的颜色的距离,然后使用此距离进行像素选择以进行裁剪。
IMG_CROP_THRESHOLD不计算背景颜色,但它在计算中提供了更大的灵活性,因为它允许开发人员指定边框颜色和阈值。文档中的阈值很差,说明它是一个百分比,但实际上这意味着一个整数或0到100之间的浮点数(例如不是0.25而是25)。
如果IMG_CROP_SIDES被切割成明亮的图像,则使用IMG_CROP_THRESHOLD
例如,使用25阈值-大约任何比#E8E8E8更亮的东西都是边框。
$cropped = imagecropauto($img, IMG_CROP_THRESHOLD, 25, 16777215);
https://github.com/libgd/libgd/blob/167ea1f4f0003f3e9f7ca1e586189e99cf33d47f/src/gd.c#L460
https://github.com/libgd/libgd/blob/1e47a89a65d49a9003d8365da4e26a7c1a32aa51/src/gd_crop.c#L112

eni9jsuy

eni9jsuy2#

公平地说,我没有像Andy那样查看源代码,但我花了很多时间阅读和实验,并提供了这个答案。不同之处在于IMG_CROP_THRESHOLD起作用,而IMG_CROP_SIDES、IMG_CROP_白色和IMG_CROP_BLACK不起作用。这是一个言过其实,我相信他们的工作完美的理想条件下,只是不是在真实的世界的条件。正是添加了阈值参数,允许您将作物调整到确实有效的位置。在自动裁剪函数的PHP在线文档中,有一个用户评论说_白色和_black有时不起作用。我会补充说,这方面从来没有为我工作过。用户评论给出了计算四个角落像素的平均颜色并将其传递给_threshold的示例源代码,示例代码很好,但我发现绝对角落像素仍然是随机的,以获得代表性的颜色传递给_threshold,所以我修改了代码,以平均每个角落的5x5像素正方形并传递它。所以我平均100个角落像素而不是4个像素,并将其传递给_threshold。我做了两件事来获得我喜欢的结果。我调整了传递给_ threshold的阈值,以便自动裁剪的结果在边缘上显示一点点背景,因为在我想要的文档背景颜色和我不想要的扫描仪覆盖的颜色之间的边缘处没有清晰的线条。在颜色开始混合的地方,有一个模糊的边缘,所以我使用imagecropauto来找到模糊的边缘,然后我使用返回的尺寸来传递一个每个边缘上小5个像素的矩形,以消除模糊和原始图像倾斜时留下的伪影。在一个完美的世界里,我会在尝试自动裁剪之前进行抗扭斜处理,但是有了这些组合方法,我对我所取得的结果非常满意。我希望这种方法有所帮助。哦,我认为开发人员应该添加相同的阈值参数,这是在_threshold选项中提供的_白色,_ black和_sides选项,这将是一个微不足道的变化,它将允许php开发人员使用这些功能的情况下,现在他们不工作。我的两分钱,可能在错误的论坛。

相关问题