Преобразование изображения в Jpeg2000 не работает
Я пытаюсь преобразовать изображение в Jpeg2000:
convert example2.png -quality 95 example.jp2
Но вывод все еще png:
file example.jp2
example.jp2: PNG image data, 2549 x 3507, 8-bit/color RGB, non-interlaced
Что я делаю неправильно?
convert -version
Version: ImageMagick 6.8.9-9 Q16 x86_64 2016-11-29 http://www.imagemagick.org
3 ответа
Что я делаю неправильно?
Ничего такого. Введенная вами команда верна. Проблема в том, что *.jp2
(JPEG 2000
) поддержка не встроена в версию репозитория Imagemagick. При преобразовании в неподдерживаемый формат конечный файл будет иметь тот же формат, что и исходный файл.
Вы можете убедиться в этом, посмотрев на четвертые строки convert -version
выход:
$ convert -version
Выход:
Version: ImageMagick 6.8.9-9 Q16 x86_64 2016-11-29 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules OpenMP
Delegates: bzlib cairo djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png rsvg tiff wmf x xml zlib
Заметить, что jp2
не входит
Это сообщенная ошибка ( imagemagick: отсутствует поддержка JPEG-2000):
Отчет об ошибке описывает проблему и указывает, что она была исправлена в последнем выпуске (Версия 6.9.1.2-1), который еще не достиг хранилища.
Еще один тест для jp2
поддержка это:
$ identify -list format | egrep -i jp2
Вы пользуетесь на свой страх и риск PPA
в:
https://launchpad.net/~isage-dna/+archive/ubuntu/imagick
Обновить:
Как указано в командах SamWilson, поддерживаемый протестированный PPA находится по адресу: https://launchpad.net/~lyrasis/+archive/ubuntu/imagemagick-jp2
sudo add-apt-repository ppa:lyrasis/imagemagick-jp2
sudo apt-get update
По состоянию на февраль 2021 года эта проблема все еще остается проблемой. Поддержка JPEG 2000 AFAIK отключена в Ubuntu из-за предполагаемого риска патентов на подводные лодки.
Однако существует обходной путь, не связанный с использованием сторонних PPA или самостоятельной компиляцией программного обеспечения.
libopenjp2-tools
пакет содержит инструмент декодирования под названием
opj_decompress
который может конвертировать файлы .jp2 в различные форматы без потерь, включая PNG, BMP, TIF и RAW. Он может даже конвертировать целые каталоги файлов без помощи внешних инструментов.
Преобразование одного файла в TIF:
opj_decompress -i input.jp2 -o output.tif
Преобразование каталога файлов в TIF:
opj_decompress -ImgDir my_jp2_images/ -OutFor TIF
К сожалению, собственное преобразование каталогов не очень быстрое из-за того, что оно не является многопоточным. На протяжении многих лет мне приходилось работать с большим количеством файлов JPEG 2000, и я начал использовать GNU Parallel для ускорения процесса преобразования за счет использования всех доступных потоков процессора.
Преобразование всех файлов .jp2 в каталоге в .tif (необходимо перейти в каталог, содержащий файлы):
ls *.jp2 |parallel -j 10 --nice 19 --bar --will-cite "opj_decompress -i {} -o {}.tif"
Изменить значение
-j
сколько нитей хотят использовать.
Эти файлы очень большие, поскольку они не используют сжатие любого типа, поэтому, если вам нужно передать их по сети или вы планируете хранить их в течение длительного времени, вы можете уменьшить их размер, применив сжатие LZW:
ls *.tif |parallel -j 10 --nice 19 --bar --will-cite "mogrify -compress lzw {}"
По моему опыту, это может уменьшить размер файла до 50%.