【问题标题】:How to acces exiv2 ImageSize Property?如何访问 exiv2 图像大小属性?
【发布时间】:2019-03-16 06:06:37
【问题描述】:

我从搅拌机创建图像,它们缺少 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

【问题讨论】:

  • 到目前为止,您是否尝试过任何您遇到问题的方法?像,哦,也许reading 来自进程替换的输出,或者使用$BASH_REMATCH?告诉我们您选择的方法遇到了什么问题,我们很乐意帮助您度过难关。
  • @ghoti 我希望有一种方法可以从 exiv2 获取宽度和高度的数字,而无需解析字符串。这似乎是可能可用的东西,但我只是不知道如何

标签: bash exif exiv2


【解决方案1】:

正如 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

【讨论】:

  • 如果这是您尝试过的,那么将其添加到您的问题中似乎是最有意义的,并明确说明为什么这不符合您的需求。我想它也可以作为一个答案,但如果你的问题显示了你迄今为止的努力,你可能会得到更多的答案和更少的反对票。
  • 感谢您的帮助 cmets ghoti。这不是我尝试过的,甚至不是我想要的,因为似乎应该有一个内置的更简单的方法。但是由于我的问题除了反对之外没有得到太多关注,我尝试了你自己解析文本输出的建议。我会把它作为一个答案,因为它实际上是一个(尽管我认为它是一个不漂亮的答案)。我个人并不关心现在吸引更多的答案,因为这并不理想,但现在可以使用。
  • 人力资源部。清楚您希望如何在不解析字符串的情况下从该命令的输出中提取文本会很好。似乎您正在寻求 exiv2 的使用帮助,而不是编程任务的帮助。我很乐意为质量更好的问题提供答案。但是,如果您对此不感兴趣,则可能需要考虑删除问题以避免进一步的否决。
  • 我期待 exiv2 提供一些功能来仅获取 ImageSize 字段的值,就像有命令仅获取 Exif.Image.ImageWidth 的值和我只是无法找到有关它的文档。您对我的问题的唯一问题是它没有提及我尝试过的内容吗?
  • 我刚刚查看了exiv2 的选项。看起来-M 选项使用的“命令文件”被记录为仅包含setadddel 命令,而print 操作不包含限制显示内容的选项。对我来说似乎很清楚,您要么需要解析 exiv2 的输出,要么需要使用不同的工具。
【解决方案2】:

或没有 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 ' '

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    相关资源
    最近更新 更多