web-dev-qa-db-fra.com

Comment puis-je convertir un PNG en PDF en haute qualité afin qu'il ne soit pas flou ou flou?

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

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

convert sample.png sample.pdf

J'ai également essayé de nombreux commutateurs pour régler la profondeur, ainsi que le réglage de la qualité:

convert -quality 100 sample.png sample.pdf

Cependant, le PDF sort toujours flou/flou.

Voici un exemple d'image:

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

En tant que png, il est net et propre. Lorsque je le convertis en PDF, même à la même taille, il semble flou:

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

Comment puis-je convertir PNG en un PDF en haute qualité?

59
cwd

Essayez d'utiliser le -density option. La résolution par défaut est de 72 points par pouce. Essayez donc quelque chose comme -density 300.

Pour référence, voir -density dans la documentation des options de ligne de commande ImageMagick.

36
user32208

Il peut être très compliqué d'obtenir une bonne sortie PDF à partir de convert. Essayez img2pdf à la place. Du fichier Lisezmoi:

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

Pour clarifier: PDF peut incorporer 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: vérifiez identify -list format | grep JP2.)

22
Brian Z

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 --- PDF viewer de l'anti- aliasing .

Si vous utilisez evince pour afficher le PDF, vous pouvez voir la fonction anti-aliasing automatiquement désactivée à un certain zoom (300% dans mon test rapide). Vous pouvez le voir clairement lorsque vous continuez à zoomer - vous remarquerez qu'à un moment donné, les pixels deviennent soudainement clairement visibles. C'est le moment où l'anti-aliasing doit avoir été désactivé pour permettre une inspection précise de l'image.

14
rozcietrzewiacz

Brian Z ci-dessus a fourni le moyen ci-dessous, qui est le moyen correct, entièrement réversible et sans perte (en supposant que l'étape de conversion est en fait sans perte, ce que je pense que c'est ou devrait être) le moyen de mettre les png dans un pdf. Vous devez convertir le png en jp2 sans perte afin d'être conforme à la structure/aux lecteurs PDF (je pense).

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

Cependant, il convient de noter que vous pouvez fournir directement les fichiers .png à img2pdf comme:

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

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

* 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 de bloc d'en-tête/pied de page ont été supprimées (ce qui rend les fichiers encore plus petits!) Du png qui est inséré en ne laissant que les données d'image brutes (les métadonnées qui ont été supprimées sont intégrées dans la structure pdf), vraisemblablement pour "pirater" le pdf pour afficher le png brut qui est techniquement non conforme avec le conteneur. Il s'affiche correctement dans Firefox et peut s'afficher correctement dans tous les lecteurs modernes, mais si png n'est pas conforme au conteneur, les lecteurs stricts peuvent ne pas rendre 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 a fonctionné pour moi pour extraire et reconstruire les fichiers png avec des hachages correspondants à ceux utilisés pour l'entrée dans le pdf. https://github.com/jack4455667788/RebuildRawPNGExtractedFromPDF

4
Jack Hadley

Le PDF est un format vectoriel (c'est-à-dire que le fichier contient une description des lignes à dessiner), tandis que d'autres formats (JPG, PNG) sont des formats raster (le fichier décrit la couleur à peindre pour chaque pixel). Si vous faites exploser un PDF vers le haut, ce ne sont que des lignes nettes; JPG et PNG montrent la pixellisation.

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

2
vonbrand

Je pense que pour png-to-pdf -density le paramètre doit être petit plutôt que grand. Vous pouvez essayer quelque chose comme convert -quality 100 -density 50

2
user39384