2017-10-24 2 views
0

Ich habe ein einfaches Skript, das PDF-Dateien in PNG-Dateien konvertiert.Wie kann man bestimmen, welcher Farbraum für die Umwandlung von PDF in Bild verwendet wird?

es im Wesentlichen um dieses convert Befehl ausführen:

convert -strip -quiet -quality 100 -alpha off -density 165% -scene 1 -colorspace sRGB "/data/input.pdf" "/output/image.png" 

aber ich habe diese eine bestimmte PDF-Datei, die einen weißen Hintergrund wie diese hat:

enter image description here

und das Ergebnis sieht wie folgt aus:

enter image description here

Sie können sehen, dass der weiße Hintergrund schwarz geworden ist.

Ich kann es beheben, indem einfaches Umschalten des Parameters auf -colorspace cmyk

ich identify auf die Datei lief, aber es zeigt nicht cmyk

> identify /data/input.pdf 
/data/input.pdf PDF 1920x1080 1920x1080+0+0 16-bit sRGB 2.07246MiB 0.000u 0:00.000 

Meine Frage ist:

Wie Ich weiß, wann sRGB-Speicher verwendet werden soll (bis diese Datei verfügbar ist) und wann Cmyk verwendet werden soll.

EDIT:

Die Datei can be viewed here

ImageMagick Versionsinformationen

> convert --version 
Version: ImageMagick 6.9.9-19 Q16 x86_64 2017-10-24 http://www.imagemagick.org 
Copyright: © 1999-2017 ImageMagick Studio LLC 
License: http://www.imagemagick.org/script/license.php 
Features: Cipher DPC OpenMP 
Delegates (built-in): bzlib djvu fontconfig freetype gvc jbig jng jpeg lcms lqr lzma openexr png tiff wmf x xml zlib 

Hier ist die dockerfile, die meine dev Umgebung repliziert:

FROM ubuntu:16.04 


RUN apt-get update --fix-missing 
RUN apt-get install -y libmagickwand-dev wget 


WORKDIR '/src' 
ENV IMAGEMAGICK_VERSION 6.9.9-19 
RUN wget --no-check-certificate https://github.com/ImageMagick/ImageMagick/archive/${IMAGEMAGICK_VERSION}.tar.gz -O ${IMAGEMAGICK_VERSION}.tar.gz && \ 
    tar -zxvf ${IMAGEMAGICK_VERSION}.tar.gz && \ 
    cd ImageMagick-${IMAGEMAGICK_VERSION} && \ 
    ./configure && \ 
    make && \ 
    make install && \ 
    ldconfig /usr/local/lib 


WORKDIR/
COPY *.pdf/
COPY *.sh/

Voll s et von Dateien finden Sie hier: https://github.com/kongakong/StackoverflowCode/tree/convert-pdf-imagemagic/imagemagick/46900660

+0

Es gibt keine aussagekräftigen Test auf einer Datei-Datei-Basis. In PDF werden Farbräume Bild für Bild festgelegt. – joelgeraci

+0

Sie haben JPGs und keine PDF-Dateien veröffentlicht. Daher ist es schwierig, Ihren Befehl zu testen und eine Reparatur vorzuschlagen. – fmw42

+0

@ fmw42 Ich glaube nicht, dass SO mir erlaubt, Dateien –

Antwort

0

Ihr Eingabebeispiel ist JPG und nicht PDF. Können Sie das Original-PDF als Link posten?

Wenn Sie keine Profile verwenden möchten, sollten Sie vor dem Lesen der PDF-Eingabedatei nur sRGB mithilfe von -colorspace sRGB konvertieren. Wenn das Bild CMYK ist, wird es in SRGB konvertiert. Wenn es schon sRGB ist, tut es nicht weh, es dort zu haben.

Beachten Sie, dass die Qualität für die PNG-Ausgabe anders ist als für JPG. Also die Werte, die Sie brauchen, sind unterschiedlich. Auch sollte es nach dem Lesen der PDF platziert werden, da es für die Ausgabe gilt. Siehe http://www.imagemagick.org/script/command-line-options.php#quality

Auch die Dichte ist nicht in Prozent angegeben. Es ist ein numerischer Wert für dpi (oder Punkteperzentimeter). So-Einheiten sollten angegeben werden, wenn Sie sicher sein wollen.

Auch wenn Ihr PDF transparent ist und Sie Alpha deaktivieren, werden Sie schwarz für den Hintergrund, da transparent transparent schwarz ist.

So etwas wie:

convert -quiet -density 165 -colorspace sRGB "/data/input.pdf[0]" -alpha off -quality XX "/output/image.png" 


ich die Seiten-ID hinzugefügt haben als [0] zum PDF die erste Seite an seinem Platz zu bekommen -Scene zu verwenden. Entweder sollte in Ordnung sein. Sie können -strip hinzufügen, wenn Sie möchten, aber nach dem Lesen der PDF.

Wenn Sie sehen möchten, welchen Farbraum Ihre PDF-Datei hat, sollten Sie dies vor der Verarbeitung überprüfen.

convert image.pdf -format "%[colorspace]" info: 

Siehe http://www.imagemagick.org/script/escape.php

Sie auch für Profile überprüfen mit:

convert image.pdf -format "%[profiles]" info: 

und auch

convert image.pdf -format "%[profile:icc]" info: 
convert image.pdf -format "%[profile:icm]" info: 
1

OK. Ich habe Ihre PDF-Datei heruntergeladen. Ihre Datei ist sRGB. Es hat Transparenz. Wenn Sie die Transparenz deaktivieren, indem Sie -alpha off verwenden, wird es einen schwarzen Hintergrund haben, da Transparenz in diesem Fall transparent schwarz ist, d. H. Rgb (0,0,0,0). Wenn Sie einen weißen Hintergrund wünschen, müssen Sie das Ergebnis vor einem weißen Hintergrund abflachen. Das funktioniert also gut für mich.

convert -quiet -density 165 -colorspace sRGB color-p9.pdf[0] -background white -flatten color-p9.png 


Verwendung für mich png Ausgabe funktioniert, aber die Datei ist zu groß zu schreiben. Also habe ich es in jpg umgewandelt, einfach um es hier anzuzeigen. Sie können png für die Ausgabe auf Ihrem System verwenden und die Qualität gemäß meinem Link, der die png-Qualität beschreibt, in meinem vorherigen Beitrag festlegen.

enter image description here

+0

Ich bekomme immer noch einen schwarzen Hintergrund. Meine imagemagick Version ist 6.9.9-19. –

+0

Ich benutzte IM 6.9.9.20 Q16 Mac OSX und es funktioniert gut für mich. Haben Sie Ghostscript installiert und IM kann es finden (Konvertieren-Version sollte gs oder gslib auflisten). Wenn ja, welche Version von Ghostscript? Ich verwende gs - Version, die 9.21 sagt). Was ist deine Plattform? Hast du 'convert -quiet -density 165 -farbraum sRGB color-p9.pdf [0] -background white -flatten farbe-p9.png' – fmw42

+0

benutzt ich docker und starte imagemagick auf ubuntu 16.04. Lassen Sie mich später eine vereinfachte dockerfile kommen, so dass Sie versuchen könnten –

Verwandte Themen