为了获得ruby中的图像尺寸,我尝试使用识别来获取图像尺寸。我想检索此系统调用的输出并将输出作为字符串
str = system('identify -format "%[fx:w]x%[fx:h]" image.png')
output = `ls`
print output
但是,我得到的是最后一行输出,而不是这个特定系统调用的输出。 此外,如果有一种更简单的方法来获得没有外部宝石或库的图像尺寸,请建议它会很棒!
答案 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]。
这对我有用!请建议可能更容易或更简单的其他方法。