Как получить доступ к exiv2 ImageSize Property? - PullRequest
0 голосов
/ 11 октября 2018

Я создаю изображения из blender, и в них отсутствуют метаданные Exif, которые я добавляю с помощью команды bash exiv2.(Поскольку программное обеспечение, в которое передаются эти изображения, будет использовать метаданные.)

Например, я могу установить для ширины изображения значение 960 с помощью exiv2 -M"set Exif.Image.ImageWidth 960" image.jpg, а затем прочитать его с помощью 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 для установки Exif.Image.ImageWidth и Exif.Image.ImageLength в bash?

Стандартные теги Exif не перечислять ImageSize.

Ответы [ 2 ]

0 голосов
/ 20 января 2019

или без иероглифов

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 ' '
0 голосов
/ 11 октября 2018

Как предположил Готи, парсинг вывода работает:

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
...