MyTetra Share
Делитесь знаниями!
Как переконвертировать графические файлы (картинки) через команду mogrify - замена команды convert
21.06.2019
11:13
Текстовые метки: mogrify, linux, картинка, файл, формат, графический, конвертация, convert, ImageMagick
Раздел: Компьютер - Linux - ImageMagic

Введение


Для переконвертирования картинок через командную строку, в Linux, традиционно, используется программа convert, входящая в пакет ImageMagick. Однако, эта программа частенько выкидывает разные сюрпризы. Сегфолты на файлах со сканами в разрешении 600 dpi с размером А4 - это обычное дело. Да и скорость работы convert оставляет желать лучшего: перевод одного файла картинки средних размеров в другой формат может занять десятки секунд на каком-нибудь Core2Duo. Есть ли этой программе альтернатива? Да, есть! Называется она mogrify.


Эта программа тоже входит в пакет ImageMagick. И, похоже, что использует те же библиотеки что и convert. Но почему-то работает в разы лучше. В Linux много загадочных вещей, и вот такое положение дел для двух практически идентичных программ - это норма.


Формально, mogrify и convert - это один и тот же инструмент, у них даже опции одинаковые. Но convert не удаляет предыдущие файлы, а mogrify - удаляет. Формально, только в этом разница. И, видимо, удаляет только в том случае, если новый файл имет точно такое же название как и предыдущий.


Например, через mogrify можно переконвертировать png-файлы в jpg-файлы такой командой:



mogrify -format jpg *.png



В результате получатся новые jpg-файлы, но старые файлы тоже останутся. Что самое интересное, так это то, что mogrify сработает очень быстро. И, самое интересное - правильно. И это очень важно.



А что может пойти не так?


Вот пример.


Имеем один и тот же набор файлов. Даем команду через mogrify:



> ls -la

итого 1176

drwxr-xr-x 2 xi xi   4096 июн 21 11:20 .

drwxr-xr-x 5 xi xi   4096 июн 21 11:18 ..

-rw-r--r-- 1 xi xi 346588 июн 21 09:46 list01.png

-rw-r--r-- 1 xi xi 319640 июн 21 09:40 list02.png

-rw-r--r-- 1 xi xi 220139 июн 21 09:50 list03.png

-rw-r--r-- 1 xi xi 299066 июн 21 09:59 list04.png

> mogrify -format jpg *.png

> ls -la

итого 4580

drwxr-xr-x 2 xi xi    4096 июн 21 11:21 .

drwxr-xr-x 5 xi xi    4096 июн 21 11:18 ..

-rw-r--r-- 1 xi xi 1020737 июн 21 11:21 list01.jpg

-rw-r--r-- 1 xi xi  346588 июн 21 09:46 list01.png

-rw-r--r-- 1 xi xi  986451 июн 21 11:21 list02.jpg

-rw-r--r-- 1 xi xi  319640 июн 21 09:40 list02.png

-rw-r--r-- 1 xi xi  627298 июн 21 11:21 list03.jpg

-rw-r--r-- 1 xi xi  220139 июн 21 09:50 list03.png

-rw-r--r-- 1 xi xi  843461 июн 21 11:21 list04.jpg

-rw-r--r-- 1 xi xi  299066 июн 21 09:59 list04.png



Видим, что все отработало правильно, появились jpg-файлы в количестве 4-х штук. Теперь то же самое через convert:



> ls -la

итого 1176

drwxr-xr-x 2 xi xi   4096 июн 21 11:20 .

drwxr-xr-x 5 xi xi   4096 июн 21 11:18 ..

-rw-r--r-- 1 xi xi 346588 июн 21 09:46 list01.png

-rw-r--r-- 1 xi xi 319640 июн 21 09:40 list02.png

-rw-r--r-- 1 xi xi 220139 июн 21 09:50 list03.png

-rw-r--r-- 1 xi xi 299066 июн 21 09:59 list04.png

> convert -format jpg *.png

> ls -la

итого 1664                                                                  

drwxr-xr-x 2 xi xi   4096 июн 21 11:23 .

drwxr-xr-x 5 xi xi   4096 июн 21 11:18 ..

-rw-r--r-- 1 xi xi 346588 июн 21 09:46 list01.png

-rw-r--r-- 1 xi xi 319640 июн 21 09:40 list02.png

-rw-r--r-- 1 xi xi 220139 июн 21 09:50 list03.png

-rw-r--r-- 1 xi xi 192148 июн 21 11:23 list04-0.png

-rw-r--r-- 1 xi xi 179300 июн 21 11:23 list04-1.png

-rw-r--r-- 1 xi xi 123230 июн 21 11:23 list04-2.png

-rw-r--r-- 1 xi xi 299066 июн 21 09:59 list04.png



Тут вообще творится трешак. Вместо jpg-формата получился png-формат. И почему-то вместо 4-х файлов было сгенерировано 3 файла.


Может быть, новые файлы только называются как png, а на самом деле это jpg? Посмотрим:



> file list04-0.png  

list04-0.png: PNG image data, 2480 x 3507, 2-bit grayscale, non-interlaced



Нет, сгенерировались именно png-файлы.


Чтение man света на проблему не проливает. Все опции у этих двух программ идентичные. Но одна ведет себя приавильно, а вторая черти как. Поэтому в этой статье дан такой лайфхак: если криво работает convert, воспользуйтесь mogrify.



Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования