Wie aktiviere ich JPEG2000 (jp2) in ImageMagick?

13

Ich möchte ImageMagick verwenden, um einige Dateien von jp2 (JPEG-2000) in jpg zu konvertieren. Der Befehl dazu ist in Ordnung, aber ich weiß nicht, wie ich den jp2-Delegaten in ImageMagick aktivieren soll.

Ich habe ImageMagick über den Paketmanager installiert : sudo apt-get install ImageMagick.
Ich verwende ImageMagick 6.8.9-9. Dies ist die aktuellste Version von ImageMagick apt-get.

Derzeit werden viele der Hauptdateitypen automatisch eingeschlossen. Die folgenden Bibliotheken verfügen über eine integrierte Unterstützung und werden als Delegaten aufgeführt:

bzlib cairo djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png rsvg tiff wmf x xml zlib

Bearbeiten : Ich hätte erwähnen sollen, ich habe versucht, Dateien zu konvertieren, bevor ich anfing zu streiten openjpeg-2. Ein Befehl wie convert input.jp2 output.jpggibt mir die Fehlermeldung:

convert: Kein Decodierungsdelegierter für dieses Bildformat "JP2" @ error / konstitu.c / ReadImage / 501.

Also muss ich jp2 zum Laufen bringen. Die relevante Bibliothek ist openjpeg-2, und die Delegierten-Seite von ImageMagick gibt den Tarball an openjpeg-2.0.0.tar.gz.

Okay, also habe ich es heruntergeladen und die Installationsanweisungen in der Installationsdatei befolgt. Normales Zeug: cmake ., sudo make install.

Aber wie konfiguriere ich ImageMagick jetzt so, dass es "aufnimmt" open-jpeg-2.0.0? Muss ich ImageMagick aus dem Quellcode neu erstellen, um dies zu tun? Oder gibt es einen Befehl, den ich eingeben kann, um ImageMagick zum Aktivieren zu bewegen? Oder eine Datei, die ich ändern sollte, etc?

Ich habe mich ewig damit beschäftigt, viele Fragen und Antworten online gelesen, aber ich habe es immer noch nicht geknackt. Es ist eher ein Problem meines Linux-Wissens als etwas, das mit ImageMagick per se zu tun hat. Ich würde es wirklich begrüßen, wenn mir jemand helfen könnte, herauszufinden, was der fehlende Schritt hier ist. Vielen Dank.

Arokath
quelle
Ich habe dieses Problem gelöst, indem ich stattdessen Grafikmagick verwendet habe, z. B.gm convert in.jp2 out.jpg
Sam Wilson

Antworten:

3

Installieren libopenjp2-toolsund verwenden Sie opj_decompress, um jp2 in etwas anderes zu konvertieren:

sudo apt install libopenjp2-tools
opj_decompress -i m_3712213_sw_10_h_20160625_20161004.jp2 -OutFor TIF -o my.tif

Dieses Paket enthält Befehlszeilentools, die Konvertierungen zwischen verschiedenen Formaten ermöglichen, sowie Tools zum Codieren und Decodieren von Motion-JPEG2000-Videoformaten:

  • opj_decompress: Dekodiert j2k-, jp2- und jpt-Dateien in pgm, ppm, pnm, pgx und bmp.
  • opj_compress: Codiert pnm-, pgm-, pgx-, bmp- und ppm-Dateien in j2k und jp2.
  • opj_dump: Speicherauszugsinformationen enthalten in j2k und jp2.
  • index_create: Erstelle jp2 mit einer JPIP-Indexdatei aus einer j2k-Datei.
  • frame_to_mj2: Konvertiert YUV-Videostreams in das mj2-Format.
  • mj2_to_frames: Konvertiert mj2-Videostreams in das YUV-Format.
  • wrap_j2k_in_mj2: Wrap j2k-Codestreams in das mj2-Format.
  • extract-j2k-from_mj2: Extrahiert j2k-Codestreams aus dem mj2-Format.
Bora M. Alper
quelle
2

Ich behebe mein Problem, die openjp2-Delegierung in Imagemagick zu aktivieren.

Stellen Sie sicher, dass Sie Folgendes installiert haben:

Wenn Sie jetzt starten, sehen ./configureSie die openjp2- Delegierung

DELEGATES = mpeg jbig jng jpeg lcms lzma openjp2 png tiff zlib

Arnaud
quelle
1

Aus meiner Standardinstallation von Image Magick 6.8.9.9 aus den Ubuntu 16.04-Repositorys geht hervor, dass Jpeg200 ( .jp2) vollständig unterstützt wird.

Konvertierungen können durchgeführt werden mit:

convert in.png out.jp2
convert in.jp2 out.jpg

Für Befehlszeilenoptionen esp. Informationen zu Codierungsoptionen oder zum Umgang mit gekachelten Bildern finden Sie in der Online-Dokumentation zu Image Magick .

Es muss jedoch gesagt werden, dass dies jp2nicht in der Liste der unterstützten Formate aufgeführt ist:

identify -list format

Trotzdem funktioniert es anscheinend immer noch gut.

Takkat
quelle
1
Danke @Takkat, das ist bei mir aber nicht der Fall. Wenn ich this ( convert in.jp2 out.jpg) versuche , erhalte ich die Fehlermeldung, dass ich keinen jp2-Delegaten habe: convert: Kein Dekodierungsdelegierter für dieses Bildformat 'JP2' @ error / konstitu.c / ReadImage / 501. Ich bin am 6.8.9.9 (von convert --version: Version: ImageMagick 6.8.9-9 Q16 x86_64 2017-03-14 imagemagick.org ). Wirklich seltsam, dass Ihre Version jp2 nicht als Format auflistet, aber trotzdem funktioniert! Sind die JPG-Ausgabedateien gültig?
Arokath
PS: Es gibt einen Tippfehler in Ihrem Link: PHP nicht PH2 :)
Arokath
@arokath: Ja, Dateien sind gültig - ich habe die Konvertierung von und nach getestet. Das Lesen von JPG mit ImageViewer oder Gimp ist in Ordnung, das Lesen von JP2 mit Gimp oder Darktable war in Ordnung.
Takkat
1
Hmm, ich habe mir diesen Fehlerbericht angesehen. Selbst mit der Installation libopenjp2-devund dem anschließenden Wiederherstellen aus dem Quellcode funktioniert es immer noch nicht. Ich stecke leider immer noch zu 100% fest. Vielen Dank für Ihre Antworten!
Arokath
1
Dies ist keine Antwort auf die Frage. Sie sagen nur, dass es für Sie funktioniert! Und einen Link zur Dokumentation zu geben, ist keine Antwort!
Azim
1

@arokath Wie Sie konnte ich in der Version von ImageMagick, die ich über apt-get (Ubuntu 16.04.1 LTS) installiert habe, keine JP2-Unterstützung finden.

Vor dem Erstellen aus dem Quellcode ( gemäß den ImageMagick-Dokumenten ) habe ich zuerst libopenjp2-toolsund dann installiert libopenjp2-7-dev.

Hinweis : Ich bin mir nicht sicher, welcher den Trick ausgeführt hat: Die alphabetische Zusammenfassung am Ende der configureaufgelisteten jp2-Unterstützung als OpenJP2, anstatt JP2dass ich sie erst bemerkt habe, nachdem ich sie installiert libopenjp2-7-devund neu konfiguriert hatte. Es ist durchaus möglich, dass es nur mit der ersten Bibliothek funktioniert hat.

Außerdem ./configure, makeund make installfand ich , dass ich brauchte , um „configure die dynamischen Linker“ (wie in der Dokumentation vorgeschlagen): sudo ldconfig /usr/local/lib.

Jetzt /usr/local/bin/identify -list formatenthält die Ausgabe von :

  J2C* rw-   JPEG-2000 Code Stream Syntax (2.1.0)
  J2K* rw-   JPEG-2000 Code Stream Syntax (2.1.0)
  JNX* r--   Garmin tile format
  JP2* rw-   JPEG-2000 File Format Syntax (2.1.0)
  JPC* rw-   JPEG-2000 Code Stream Syntax (2.1.0)
  JPM* rw-   JPEG-2000 File Format Syntax (2.1.0)
  JPT* rw-   JPEG-2000 File Format Syntax (2.1.0)
 JSON  -w+   The image format and characteristics
user3294778
quelle
1
Danke dafür. Ich habe leider immer noch Probleme! Ich habe installiert libopenjp2-toolsund libopenjp2-7-devverwendet apt-get, dann aus dem Quellcode erstellt und dann ausgeführt sudo ldconfig /usr/local/lib. (Mit anderen Worten, folgte den Dokumenten). NOCH kein JP2. Argh! Es macht mir den Kopf rein. Ich werde den Prozess für alle Fälle noch einmal durchlaufen.
Arokath
Immer noch kein Glück. Ich habe festgestellt, dass beim Ausführen ./configurenach JP2 gesucht wird und es nicht gefunden wird: "Nach LIBOPENJP2 suchen ... nein" . Als Bonus funktioniert es jetzt im Allgemeinen nicht mehr für JPEG-Konvertierungen. Als ich es versuchte convert in.png out.jpg, wurde eine Datei erstellt, die jedoch ungültig ist. Es handelt sich um eine PNG-Datei mit der Erweiterung jpg. Ich weiß nicht, warum JPEG plötzlich kaputt gehen sollte, wenn ich aus dem Quellcode kompiliert habe!
Arokath
Versuchen Sie, "apt-get build-dep imagemagick" auszuführen, damit die von imagemagick benötigten Bibliotheken installiert werden (dies sind die Bibliotheken, mit denen es in der Version erstellt wurde, sodass Sie weiterhin openjp2 benötigen)
cbz