如何从 RMagick 或 Chunky_PNG 中的每个像素获取十六进制值?
How do I get the hex value from each pixel in RMagick or Chunky_PNG?
我正在尝试使用 RMagick
或 Chunky_PNG
将每个像素的值读取为十六进制(HTML 表示法),例如#5DBCD2
。目前我有以下哪种方法可以满足我的要求,但我找不到实际读取十六进制值的正确方法。不过,我更愿意使用 Chunky_PNG
,谢谢!
require 'chunky_png'
img = ChunkyPNG::Image.from_file("image.png")
height = img.dimension.height
width = img.dimension.width
height.times do |i|
width.times do |j|
p [ChunkyPNG::Color.r(img[j,i]), ChunkyPNG::Color.g(img[j,i]), ChunkyPNG::Color.b(img[j,i])]
end
end
或
require 'RMagick'
include Magick
image = ImageList.new("image.png")
(0..image.columns).each do |x|
(0..image.rows).each do |y|
pixel = image.pixel_color(x, y)
p [pixel.red, pixel.green, pixel.blue]
end
end
有点棘手的解决方案,但它应该可以解决问题。
require 'chunky_png'
img = ChunkyPNG::Image.from_file("image.png")
height = img.dimension.height
width = img.dimension.width
height.times do |i|
width.times do |j|
arr = [ChunkyPNG::Color.r(img[j,i]), ChunkyPNG::Color.g(img[j,i]), ChunkyPNG::Color.b(img[j,i])]
p "\##{arr.map {|x| x.to_s(16).rjust(2, '0')}.join.upcase}"
end
end
例如,您想要 [204, 102, 0] 的值(转换为 #cc6600
),您可以使用以下代码。
"\##{[204, 102, 0].map {|x| x.to_s(16).rjust(2, '0')}.join.upcase}"
=> "#CC6600"
分解 .to_s(16)
将整数转换为十六进制格式,如果字符串长度不匹配 2 个字符,.rjust(2, '0')
会在前面添加“0”。
希望这对您有所帮助。
如果使用RMagick,可以对每个像素颜色使用to_s方法找到对应的十六进制值。这并不完全简单,但这篇博客 post 解释了如何去做:
http://blog.kellishaver.com/image-color-analysis-with-rmagick/
我正在尝试使用 RMagick
或 Chunky_PNG
将每个像素的值读取为十六进制(HTML 表示法),例如#5DBCD2
。目前我有以下哪种方法可以满足我的要求,但我找不到实际读取十六进制值的正确方法。不过,我更愿意使用 Chunky_PNG
,谢谢!
require 'chunky_png'
img = ChunkyPNG::Image.from_file("image.png")
height = img.dimension.height
width = img.dimension.width
height.times do |i|
width.times do |j|
p [ChunkyPNG::Color.r(img[j,i]), ChunkyPNG::Color.g(img[j,i]), ChunkyPNG::Color.b(img[j,i])]
end
end
或
require 'RMagick'
include Magick
image = ImageList.new("image.png")
(0..image.columns).each do |x|
(0..image.rows).each do |y|
pixel = image.pixel_color(x, y)
p [pixel.red, pixel.green, pixel.blue]
end
end
有点棘手的解决方案,但它应该可以解决问题。
require 'chunky_png'
img = ChunkyPNG::Image.from_file("image.png")
height = img.dimension.height
width = img.dimension.width
height.times do |i|
width.times do |j|
arr = [ChunkyPNG::Color.r(img[j,i]), ChunkyPNG::Color.g(img[j,i]), ChunkyPNG::Color.b(img[j,i])]
p "\##{arr.map {|x| x.to_s(16).rjust(2, '0')}.join.upcase}"
end
end
例如,您想要 [204, 102, 0] 的值(转换为 #cc6600
),您可以使用以下代码。
"\##{[204, 102, 0].map {|x| x.to_s(16).rjust(2, '0')}.join.upcase}"
=> "#CC6600"
分解 .to_s(16)
将整数转换为十六进制格式,如果字符串长度不匹配 2 个字符,.rjust(2, '0')
会在前面添加“0”。
希望这对您有所帮助。
如果使用RMagick,可以对每个像素颜色使用to_s方法找到对应的十六进制值。这并不完全简单,但这篇博客 post 解释了如何去做:
http://blog.kellishaver.com/image-color-analysis-with-rmagick/