在红宝石中获取图像的尺寸

时间:2014-07-09 11:57:06

标签: ruby

为了获得ruby中的图像尺寸,我尝试使用识别来获取图像尺寸。我想检索此系统调用的输出并将输出作为字符串

str = system('identify -format "%[fx:w]x%[fx:h]" image.png')
output = `ls`
print output

但是,我得到的是最后一行输出,而不是这个特定系统调用的输出。 此外,如果有一种更简单的方法来获得没有外部宝石或库的图像尺寸,请建议它会很棒!

2 个答案:

答案 0 :(得分:3)

由于您已经使用了外部库(ImageMagick),因此可以使用其Ruby包装器RMagick

require 'RMagick'

img = Magick::Image::read('image.png').first
arr = [img.columns, img.rows]

以下是一个非常简单的PNG解析器示例:

data = File.binread('image.png', 100) # read first 100 bytes

if data[0, 8] == [137, 80, 78, 71, 13, 10, 26, 10].pack("C*")
  # file has a PNG file signature, let's get the image header chunk

  length, chunk_type = data[8, 8].unpack("l>a4")

  raise "unknown format, expecting image header" unless chunk_type == "IHDR"

  chunk_data = data[16, length].unpack("l>l>CCCCC")
  width              = chunk_data[0]
  height             = chunk_data[1]
  bit_depth          = chunk_data[2]
  color_type         = chunk_data[3]
  compression_method = chunk_data[4]
  filter_method      = chunk_data[5]
  interlace_method   = chunk_data[6]

  puts "image size: #{width}x#{height}"
else
  # handle other formats
end

答案 1 :(得分:0)

好的,经过一些实验后我终于找到了解决方案。

str = `identify -format "%[fx:w]x%[fx:h]" image.png`
arr = str.split('x')

数组arr现在包含尺寸[width,height]。

这对我有用!请建议可能更容易或更简单的其他方法。