如何访问exiv2 ImageSize属性?

时间:2018-10-11 08:13:11

标签: bash exif exiv2

我从Blender创建图像,但是它们缺少Exif元数据,我使用bash命令exiv2添加了这些元数据。 (因为将这些图像传递到的软件将使用元数据。)

例如,我可以使用exiv2 -M"set Exif.Image.ImageWidth 960" image.jpg将“图像宽度”设置为960,然后使用exiv2 -g Exif.Image.ImageWidth -Pv image.jpg读出。

为进行快速总结,我可以进行exiv2 image.jpg以获得一组Exif元数据列表。这包括

$ exiv2 image.jpg
File name       : image.jpg
File size       : 32975 Bytes
MIME type       : image/jpeg
Image size      : 960 x 540

如何使用此Image size在bash中设置Exif.Image.ImageWidthExif.Image.ImageLength

standard Exif tags未列出ImageSize

2 个答案:

答案 0 :(得分:0)

如ghoti所建议的那样,解析输出有效:

exiv2 image.jpg  | grep  "Image size" | sed -n "s/^.*Image size\s*:\s\([0-9]*\)\sx\s\([0-9]*\).*$/\1/p"

给出宽度,然后

exiv2 lowerCircle_0100.jpg  | grep  "Image size" | sed -n "s/^.*Image size\s*:\s\([0-9]*\)\sx\s\([0-9]*\).*$/\2/p"

高度。

尽管如此,我仍然希望得到一个更干净的答案。

sed命令的说明:

 sed -n "s/^.*Image size\s*:\s\([0-9].*\)\sx\s\([0-9]*\).*$/\1/p"

 -n            suppress printing
 "s/           substitute match
 ^.*           everything from the start
 Image size    until "Image size" is encountered
 \s*:\s        whitespace, colon, a single space
 ([0-9]*\)    any number of digits. store that in \1
 \sx\s         space x space
 ([0-9]*\)    another group of digits. store that in \2
 .*$           everything until the end of line
 /\1           substitute all that with the first group
 /p"           and print the substituted result

答案 1 :(得分:0)

或没有sed象形文字

exiv2 pr  X.jpg | awk -F: '/Image size/ {print $2}' | cut -dx -f1 | tr -d ' '

exiv2 pr  X.jpg | awk -F: '/Image size/ {print $2}' | cut -dx -f2 | tr -d ' '