使用PHP检测主要的图像阴影

时间:2009-10-30 08:37:50

标签: php image-processing gd

之前我曾经使用过GD,但它只是用于动态调整大小/生成图像 - 虽然我非常肯定它有能力做我想要做的事情。

尽可能简单,我需要检查图像以确定它是浅色背景还是深色背景。即如果背景主要是'轻',我返回的值为'1',如果它主要是'暗',则返回'0'。

在这个过程中,每次只会迭代5个图像,但我在这里对处理时间非常有用 - 页面将经常被调用。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:3)

首先看看是否有任何可以利用的模式 - 例如,左上角或右上角(例如)是否总是具有背景颜色?如果是这样,只需查看该像素的颜色。

也许你可以通过查看一些关键像素并对其进行平均来获得“足够好”的想法。

如果没有这样简单的事情,你需要做的工作就会开始上升几个数量级。

我的一个好主意是将像素条带从左上角对角线对角线(可能看看Bresenham's line algorithm)。寻找黑暗和浅色的运行,并且可能需要运行时间最长;如果这不起作用,也许你应该根据他们的光明和黑暗来“得分”。

如果您的图片不必要地大(例如1000x1000或更高),那么使用imagecopyresized便宜地将其缩小到合理的范围(例如80x80)。

如果图像的MOST是背景色,那么可以工作的是将图像重新采样为1像素并检查该像素的颜色(或者可能是小的,4x4左右,之后你会计算像素以查看是否图像主要是浅色或深色。

请注意,imagecopyresampled比imagecopyresized贵得多,因为'resized只从原始像素中获取单个像素,而'resampled实际上将像素混合在一起。

如果你想要一个“亮度”的度量,你可以简单地将R,G和B值加在一起。或者你可以选择YCbCr中使用的亮度公式:

Y' = 0.299 * R + 0.587 * G + 0.114 * B

这给出了一种更加“以人为本”的轻盈度量。