Преобразование изображения в 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%.

Попробуй это

convert example2.png -quality 0 example.jp2
Другие вопросы по тегам