我想解析来自identify -verbose (ImageMagick)的输出,并将其作为哈希值返回。输出如下所示:
Format: JPEG (Joint Photographic Experts Group JFIF format)
Mime type: image/jpeg
Class: DirectClass
Geometry: 200x276+0+0
Resolution: 300x300
Print size: 0.666667x0.92
Units: PixelsPerInch
Type: TrueColor
Endianess: Undefined
Colorspace: sRGB
Depth: 8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
Channel statistics:
Pixels: 55200
Red:
min: 0 (0)
max: 255 (1)
mean: 53.5216 (0.209889)
standard deviation: 50.4831 (0.197973)
kurtosis: 1.76124
skewness: 1.173现在,我试图作弊并在上面使用YAML.load,但我得到了一个ParseError (这一直是一个很长的机会,谁知道是什么原因导致它无效)。
那么,有没有一种优雅的方法可以将其解析为嵌套的散列呢?我想像这样得到输出:
{
"Format" => "JPEG (Joint Photographic Experts Group JFIF format)",
"Mime type" => "image/jpeg",
"Class" => "DirectClass",
...
"Channel depth" => {
"red": "8-bit",
"green": "8-bit",
"blue": "8-bit",
},
...
}发布于 2015-03-20 00:59:05
尝试将其转换为有效的YAML。这个输出非常接近,实际上,如果您用Image:\n Name: <name>替换Image: <name>行,就可以直接解析它。
这里有一个至少适用于你的例子的杂乱无章:
require 'yaml'
def parse_image_magick_output(str)
YAML::load(str.sub(/Image:\s*(.*?)$/m, "Image:\n Name: \\1"))
end
pp parse_image_magick_output(get_im_output) # =>
# {"Image"=>
# {"Name"=>"spec/fixtures/default.jpg",
# "Format"=>"JPEG (Joint Photographic Experts Group JFIF format)",
# "Mime type"=>"image/jpeg",
# ...
# "standard deviation"=>"50.4831 (0.197973)",
# "kurtosis"=>1.76124,
# "skewness"=>1.173}}}}当然,不同的YAML子命令可能会产生类似的非ImageMagick输出(例如,不仅仅是图像/名称的这种情况),所以不能保证这个示例在一般情况下都能正常工作(尽管您可以通过稍微多做一点工作就可以在一般的情况下匹配应该是YAML值的映射)。
https://stackoverflow.com/questions/29150200
复制相似问题