Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何区分没有颜色的像素和黑色像素?_Ruby_Image_Chunkypng - Fatal编程技术网

Ruby 如何区分没有颜色的像素和黑色像素?

Ruby 如何区分没有颜色的像素和黑色像素?,ruby,image,chunkypng,Ruby,Image,Chunkypng,我正在使用ChunkyPNG来获取图像上像素的颜色。当图像完全没有背景色,并渲染到浏览器中时,背景色将变为白色(通常,取决于浏览器配置) 我的问题是,当使用ChunkyPNG分析像素时,完全没有颜色的像素的值是rgb(0,0,0),而黑色像素的值是rgb(0,0,0)。有什么办法可以区分这些吗?正在检查不透明度或。。。我错过了什么 这是我的密码: chunky_image = ChunkyPNG::Image.from_file("test.png") width = chunky_image

我正在使用ChunkyPNG来获取图像上像素的颜色。当图像完全没有背景色,并渲染到浏览器中时,背景色将变为白色(通常,取决于浏览器配置)

我的问题是,当使用ChunkyPNG分析像素时,完全没有颜色的像素的值是
rgb(0,0,0)
,而黑色像素的值是
rgb(0,0,0)
。有什么办法可以区分这些吗?正在检查不透明度或。。。我错过了什么

这是我的密码:

chunky_image = ChunkyPNG::Image.from_file("test.png")

width = chunky_image.dimension.width
height = chunky_image.dimension.height
(0..width - 1).each do |x|
  (0..height- 1).each do |y|
    red = ChunkyPNG::Color.r(chunky_image[x,y])
    green = ChunkyPNG::Color.g(chunky_image[x,y])
    blue = ChunkyPNG::Color.b(chunky_image[x,y])
    p "red: " + red.to_s
    p "green: " + green.to_s
    p "ble: " + blue.to_s
  end
end

您需要输入rgba值,而不是rgb值

如果r,g,b为0,a为255,则为纯黑色

如果r、g、b为0,a大于0但小于255,则仍为黑色,但透明度或多或少

如果a为0,无论r、g、b是什么,它都是完全透明的(文字中没有颜色)

因此,您缺少的是颜色。a(像素)值。希望你的图片有彩色的

当图像完全没有背景色,并渲染到浏览器中时,背景色将变为白色(通常,取决于浏览器配置)

“无背景”通常通过第四颜色通道实现,以编码像素的不透明度。PNG等图像格式支持alpha通道,而标准JPEG等其他格式则不支持。大多数现代浏览器都会正确地呈现透明像素,这样您就可以看到图像“下方”的任何内容(可能是页面的背景色、一些文本等)

像素的实际颜色可以是任何颜色,但出于优化目的,它们通常是单一的纯色(例如:PNG压缩)。例如,
Imagemagick
使用白色,而
Paint.NET
使用黑色。当然,如果图像渲染器正确地支持alpha通道,那么它将正确地绘制像素


我不确定您想对像素数据做什么,但可以使用
ChunkyPNG::Color.a
获取alpha通道的值。
a
值为0表示它是完全透明的,而
255
表示它是完全不透明的。

您能给我们看一下您的代码吗?只要看一眼,它看起来有单独的“rgb”和“rgba”方法;你确定你用的是正确的吗?乔丹,这里你可以看到我的代码,以及如何使用颜色。