获取图像顶部条带的 rgba 值

Get rgba values of top sliver of image

我正在处理一个包含两种类型图像的网站。

图像类型 1 在顶部有 所有 白色 space

图像类型 2 在顶部有 至少一个非白色像素 space

我想知道是否有一种方法可以检测图像是否有白色 space 沿着图像的第一个完整宽度(高度为 1 像素)的任何地方。

图像类型 1

图像类型 2

你想在这里做什么?这似乎不是执行此操作的理想方法。

如果您有权访问代码,您可以只给顶部带有白色的图像添加 class="white-top" 或类似的内容,然后进行相应的编辑。

希望对您有所帮助!

我会考虑使用 ImageMagick 来比较某些坐标处的像素 RGB 值,这可能是使这项工作适合您的一种方式。

由于您正在使用 canvas 元素,因此您可以利用 .getImageData() 函数从 canvas 元素获取 RGBA 数据。我不知道你是打算在服务器端还是在你的 JS 中实现这个逻辑,所以我只拿一个例子 canvas DOM 对象来给我的例子一些上下文。

    canvas = document.getElementsByTagName('canvas');
    // returns array of DOM objects [<canvas width=640 height=480>]

现在我们 select 要处理的第一个图像并获取其 canvas 数据

    context = canvas[0].getContext('2d');
    // returns an ImageData object that looks like this:
    // CanvasRenderingContext2D {textBaseline: "alphabetic", textAlign: "start", font: "10px sans-serif", lineDashOffset: 0, miterLimit: 10...}

要从 canvas 的 select 部分获取 rgba 数据,请设置您希望开始的 x ,y 坐标,以 px 为单位的宽度(对于我们的示例,将为 640)和高度(1 像素,根据您的规格)。 例如:context.getImageData(x, y, w, h).data

    rgba = context.getImageData(1, 1, 640, 1).data
    // returns ImageData object from Uint8ClampedArray[2560]

您的变量 rgba 存储图像顶部第一行中每个像素的 R、G、B、A 值。也就是说第一个像素red = rgba[0], green = rgba[1], blue = rgba[2], alpha = rgba[3] 。那么,rgba[4]就是第二个像素点的红色值,重复这个模式。

本质上,您需要一个存储 nonWhite = false 并在 R、G、B、A 值中的任何一个不为 255 时立即更改为 true 的变量。我将留下实现的其余部分符合你的逻辑,但我希望这是一个好的起点。