Comment puis-je convertir un fichier PNG en PDF de haute qualité afin de ne pas le rendre flou ou flou?

54

Il y a beaucoup de questions sur la façon de convertir un fichier PDF en image PNG, mais je cherche à prendre un fichier PNG net et net et à l'envelopper ou à l'intégrer dans un fichier PDF sans le rendre flou ou flou.

Je réalise avec imagemagic installé que je peux faire une conversion simple comme:

convert sample.png sample.pdf

J'ai également essayé beaucoup de commutateurs pour régler la profondeur et la qualité:

convert -quality 100 sample.png sample.pdf

Cependant, le fichier PDF reste flou / flou.

Voici un exemple d'image:

http://img406.imageshack.us/img406/6461/picture3mu.png

En tant que png, il est net et net. Lorsque je le convertis en PDF, même à la même taille, l’apparence est floue:

Picture 4.png http://img803.imageshack.us/img803/9969/picture4at.png

Comment convertir un fichier PNG en PDF de haute qualité?

cwd
la source
J'espère que vous trouverez une bonne réponse à votre question, mais je pense que le stockage d'images au format JPG est une propriété donnée de PDF. Le format PNG, comme celui que vous nous montrez, est de bien meilleure qualité que JPG.
Jippie
1
@cwd: Avez-vous essayé de le mettre dans un fichier .tex, puis de générer le PDF? Avec \usepackage[pdftex, final]{graphicx}et \includegraphics[width=516px]{calendar.png}par exemple.
Emanuel Berg
2
@ jippie: Non, PDF peut stocker des bitmaps sans perte . Le lien fournit une liste d’algorithmes de compression plutôt que de formats, car les données bitmap d’un fichier PDF ne peuvent pas être extraites et visualisées directement au format JPEG ou TIFF. ), JPEG 2000 (également avec perte) ou l’une des variantes TIFF (sans perte). Ce qui est vrai, en revanche, c’est qu’un distillateur PDF donné peut par défaut traduire les bitmaps au format DCT (ou JPEG) et qu’il doit être invité à utiliser plutôt un formulaire sans perte.
Warren Young
@cwd Avez-vous pensé à accepter une réponse? Je pense que user32208 réponse de l » est plutôt bonne unix.stackexchange.com/a/64495/16920
Léo Hertz Léopold 준영

Réponses:

34

Essayez d'utiliser l' -densityoption. La résolution par défaut est de 72 points par pouce. Alors essayez quelque chose comme -density 300.

Pour référence, voir -densityla documentation sur les options de ligne de commande d'ImageMagick.

utilisateur32208
la source
La densité semble bien être la clé. L'échelle et la densité semblent être inversement liées, j'ai donc joué avec les deux paramètres pour obtenir un résultat optimal en termes d'aspect et de taille du fichier ... S'il existe une formule définie, j'aimerais le savoir.
Brian Z
Comment trouver la meilleure option de densité? Combien de données sont perdues with density 300avec une image d'exemple? Je pense que le résultat dépend de l'entrée. Un nouveau sujet à ce sujet ici unix.stackexchange.com/q/292025/16920
Léo Léopold Hertz le
cela ne change pas la qualité du tout pour moi.
Guillaume Chevalier
19

Il peut être très compliqué d'obtenir de bons résultats pdf convert. Essayez à la img2pdfplace. Du readme:

Conversion sans perte d'images en PDF sans réencodage inutile de fichiers JPEG et JPEG2000. Ainsi, aucune perte de qualité et aucun fichier de sortie volumineux inutile.

Pour clarifier: PDF peut intégrer des images JPEG 2000 sans perte (et la plupart des lecteurs semblent les prendre en charge ). Donc, cette conversion est complètement sans perte:

convert sample.png -quality 0 sample.jp2
img2pdf -o sample.pdf sample.jp2

(En supposant que le délégué JP2 soit disponible bien sûr: cocher identify -list format | grep JP2.)

Brian Z
la source
4
C’est à mon humble avis la meilleure réponse ici, mais vous devriez mieux expliquer votre argument, c’est-à-dire que le format PDF peut intégrer des images JPEG 2000 sans perte. Ainsi , la commande complète pour l'OP serait quelque chose comme: convert sample.png -quality 0 sample.jp2; img2pdf -o sample.pdf sample.jp2. (En supposant que le délégué JP2 soit disponible bien sûr: vérifier identify -list format | grep JP2.)
Nemo
1
Si vous souhaitez vous en tenir aux référentiels standard sur Ubuntu 14, convertcliquez sur tiff, puis sur tiff2pdf.
Camille Goudeseune
C'est une excellente réponse, merci beaucoup.
Lyubomyr Shaydariv
@ Brian-Z Dans votre réponse , pouvez-vous s'il vous plaît expliquer l'argument -quality 0?
SebMa
SebMa, @Nemo a ajouté cette commande, mais je pense qu'elle devrait peut-être l'être à la -quality 100place?
Brian Z
14

Je suis presque certain que ce que vous percevez comme une perte de qualité dans le PDF n'est qu'un effet de la fonction d' anti- aliasing de votre visionneuse PDF .

Si vous evincevisualisez le fichier PDF, vous pouvez voir la fonctionnalité anti-aliasing automatiquement désactivée à un certain zoom (300% dans mon test rapide). Vous pouvez voir cela de manière très nette lorsque vous continuez à zoomer - vous remarquerez qu'à un moment donné, les pixels deviennent soudainement clairement visibles. C'est à ce moment-là que l'anti-aliasing doit avoir été désactivé pour permettre une inspection d'image précise.

rozcietrzewiacz
la source
Hmm - c'est logique, mais j'espérais pouvoir régler l'image et la "vue initiale" à 100% de manière à ce que le résultat soit plus net.
cwd
1
@cwd Ne confondez pas le zoom (une façon d'examiner le fichier) avec la cause réelle du lissage de l'image: l' anti-aliasing . L'image est correctement stockée. C'est la visionneuse PDF qui vous trompe. Mais il pourrait même en être autrement si vous utilisiez d'autres applications d'affichage ou modifiiez leurs paramètres. Vous pourriez alors voir une image nette dans un fichier PDF et un fichier PNG lissé dans une visionneuse d'images.
rozcietrzewiacz
3

Brian Z ci-dessus a fourni le moyen ci-dessous, qui est le moyen correct, totalement réversible et sans perte (en supposant que l'étape de conversion soit en fait sans perte, ce qui est ou devrait du moins être) pour mettre des png en pdf. Vous devez convertir un fichier png en un fichier jp2 sans perte afin de vous conformer à la structure / aux lecteurs PDF (je pense).

$ convert sample.png -quality 0 sample.jp2
$ img2pdf -o sample.pdf sample.jp2

Cependant, il est intéressant de noter que vous pouvez fournir les fichiers .png eux-mêmes directement à img2pdf comme:

$ img2pdf -o sample.pdf sample-page1.png <sample-page2.png ...>

Cela produira le plus petit fichier pdf et insérera l'hex brut brut du png dans des objets du fichier pdf sans perte *.

* L'inconvénient est que ce processus n'est pas réversible, contrairement à l'utilisation de JP2. Les données d'en-tête / pied de page et et chunk d'en-tête / pied de page ont été supprimées (ce qui rend les fichiers encore plus petits!) Du fichier png inséré, ne laissant que les données d'image brutes (les métadonnées supprimées sont intégrées à la structure pdf), vraisemblablement "pirater" le pdf pour afficher un png brut techniquement non conforme au conteneur. Il affiche bien dans firefox et peut s’agir dans tous les lecteurs modernes, mais si png n’est pas conforme au conteneur, les lecteurs stricts risquent de ne pas restituer les données png brutes (car ils ne devraient pas s’y attendre / les traiter correctement).

Ici vous pouvez trouver un script bash extrêmement brut qui m'a permis d'extraire et de reconstruire les fichiers png avec des hachages correspondants à ceux utilisés pour l'entrée dans le pdf. https://github.com/jack4455667788/RebuildRawPNGExtreatedFromPDF

Jack Hadley
la source
2

Le format PDF est un format vectoriel (le fichier contient une description des lignes à dessiner), tandis que les autres formats (JPG, PNG) sont des formats raster (le fichier décrit la couleur à peindre pour chaque pixel). Si vous gonflez un fichier PDF, il ne reste que des lignes nettes. JPG et PNG montrent la pixellisation.

(OK, OK, j'ai menti. Un PDF peut aussi être un raster).

vonbrand
la source
2

Je pense que pour le -densityparamètre png-to-pdf devrait être petit plutôt que grand. Vous pouvez essayer quelque chose commeconvert -quality 100 -density 50

utilisateur39384
la source
3
Une densité plus élevée est vraiment meilleure, je viens de faire un test, 50 résultats avec beaucoup de pixels très visibles, 300 c'est joli et net.
Shaunhusain
Cela m'a dérouté, mais je pense qu'une densité plus élevée donne une sortie avec une résolution plus basse. Cela signifie que si la sortie est floue (sur-aliasé, comme dans l'exemple de la question d'origine), une densité inférieure correspond à ce que vous souhaitez. Mais si un fichier PDF est pixélisé, vous devez en effet convertir avec une densité plus élevée.
Brian Z