rmagick 颜色超出范围
rmagick color out of range
我正在尝试平均图像中的颜色,我想出了以下脚本(来自 here):
scrip.rb:
require 'rmagick'
file = "./img.jpg"
img = Magick::Image.read(file).first
color = img.scale(1, 1).pixel_color(0,0)
p [color.red, color.green, color.blue]
img.jpg:
但是 RGB 输出是 [31829, 30571, 27931]
。
问题:
- 数字不应该在
[0-255]
范围内吗?
- 我做错了什么?
奇数输出的原因是由于位深度。正如之前的答案所述,"They are stored in a 'quantum depth' of 16-bits." 这是一个初始假设,但通过查看之前的答案,这更有意义。为了将这些数字正确转换回您通常需要的 [0-255] 范围,您必须将这些值除以 256。
注意:您可以在运行时更改量子深度。读取文件时,您应该能够使用如下代码所示的块。
img = Magick::Image.read(file){self.depth = 8}.first
你所拥有的是红色、绿色和蓝色 直方图 值。
您需要除以 256
以获得每个 RGB 值。在这种情况下,RGB 值是:
require 'rmagick'
file = "./img.jpg"
img = Magick::Image.read(file).first
color = img.scale(1, 1).pixel_color(0,0)
p [color.red/256, color.green/256, color.blue/256]
# => [124, 119, 109]
This blog post 对如何使用 RMagick
.
分析图像提供了更详尽的解释
我正在尝试平均图像中的颜色,我想出了以下脚本(来自 here):
scrip.rb:
require 'rmagick'
file = "./img.jpg"
img = Magick::Image.read(file).first
color = img.scale(1, 1).pixel_color(0,0)
p [color.red, color.green, color.blue]
img.jpg:
但是 RGB 输出是 [31829, 30571, 27931]
。
问题:
- 数字不应该在
[0-255]
范围内吗? - 我做错了什么?
奇数输出的原因是由于位深度。正如之前的答案所述,"They are stored in a 'quantum depth' of 16-bits." 这是一个初始假设,但通过查看之前的答案,这更有意义。为了将这些数字正确转换回您通常需要的 [0-255] 范围,您必须将这些值除以 256。
注意:您可以在运行时更改量子深度。读取文件时,您应该能够使用如下代码所示的块。
img = Magick::Image.read(file){self.depth = 8}.first
你所拥有的是红色、绿色和蓝色 直方图 值。
您需要除以 256
以获得每个 RGB 值。在这种情况下,RGB 值是:
require 'rmagick'
file = "./img.jpg"
img = Magick::Image.read(file).first
color = img.scale(1, 1).pixel_color(0,0)
p [color.red/256, color.green/256, color.blue/256]
# => [124, 119, 109]
This blog post 对如何使用 RMagick
.