Quand je convertis un fichier pdf en tas de fichiers jpg en utilisant
convert -quality 100 file.pdf page_%04d.jpg
J'ai une perte de qualité appréciable.
Cependant, si je fais ce qui suit, il n'y a pas de perte de qualité (notable):
Démarrez gscan2pdf, choisissez fichier-> importer (et choisissez fichier.pdf). Accédez ensuite au répertoire temporaire de gscan2pdf. Il existe de nombreux fichiers pnm (un pour chaque page du fichier pdf). Maintenant oui
for file in *.pnm; do
convert $file $file.jpg done
Les fichiers jpg résultants sont (à peu près) de la même qualité que le pdf d'origine (ce que je veux).
Maintenant, ma question est, s'il existe un moyen simple de ligne de commande pour convertir le fichier pdf en un tas de fichiers jpg sans perte de qualité notable? (La solution ci-dessus est trop compliquée et prend trop de temps).
Ce que vous entendez par "perte de qualité" n'est pas clair. Cela pourrait signifier beaucoup de choses différentes. Pourriez-vous poster quelques exemples pour illustrer? Peut-être couper la même section des versions de mauvaise qualité et de bonne qualité (en tant que PNG pour éviter d'autres pertes de qualité).
Vous devrez peut-être utiliser -density
Pour effectuer la conversion à un dpi plus élevé:
convert -density 300 file.pdf page_%04d.jpg
(Vous pouvez ajouter au préalable -units PixelsPerInch
Ou -units PixelsPerCentimeter
Si nécessaire. Ma copie par défaut est ppi.)
Mise à jour: Comme vous l'avez souligné, gscan2pdf
(La façon dont vous l'utilisez) n'est qu'un wrapper pour pdfimages
(de poppler ). pdfimages
ne fait pas la même chose que convert
quand on lui donne un PDF en entrée.
convert
prend le PDF, le rend à une certaine résolution et utilise le bitmap résultant comme image source.
pdfimages
recherche dans le PDF les images bitmap incorporées et exporte chacune dans un fichier. Il ignore simplement les commandes de texte ou de dessin vectoriel dans le PDF.
Par conséquent, si ce que vous avez est un PDF qui est juste un wrapper autour d'une série de bitmaps, pdfimages
fera un bien meilleur travail de les extraire, car il vous obtient les données brutes à son format original. Vous souhaiterez probablement également utiliser l'option -j
Pour pdfimages
, car un PDF peut contenir des données JPEG brutes. Par défaut, pdfimages
convertit tout au format PNM, et la conversion JPEG> PPM> JPEG est un processus avec perte.
Alors, essayez
pdfimages -j file.pdf page
Vous pouvez ou non avoir besoin de suivre cela avec une étape convert
à .jpg
(Selon le format bitmap que le PDF utilisait).
J'ai essayé cette commande sur un PDF que j'avais fait moi-même à partir d'une séquence d'images JPEG. Les JPEG extraits étaient identiques octet par octet aux images source. Vous ne pouvez pas obtenir une qualité supérieure à cela.
Comme l'a dit la réponse de l'élève, pdfimages
est une bonne option. D'après mon expérience, gs
et convert
exportent vers une qualité médiocre, peu importe si vous spécifiez le bon dpi.
Mais si le pdf a plusieurs couches par page pdfimages
ne fonctionne pas et extrait les couches en tant qu'image distincte, dans ce cas, il vaut mieux utiliser inskcape
pour exporter la page comme on le voit.
Ce sont les commandes que j'utilise:
pdftk combined_to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {} inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png
La première commande divise toutes les pages La deuxième commande convertit page par page en png. Vous pouvez les garder en png ou simplement les convertir en jpeg
ls ./p*.png | xargs -L1 -I {} convert {} -quality 100 -density 300 {}.jpg
Par rapport à pdfimages
, gs
et à convert
d'ImageMagick, je trouve que l'exportation de inkscape
est de la meilleure qualité.
la réponse de @cjm est correcte, mais si vous aimez l'interface graphique et que vous ne voulez pas afficher toutes les pages pdf, juste pour obtenir une image, utilisez gimp.
Ouvrez un pdf avec gimp et vous obtiendrez une fenêtre d'importation avec toutes les pages rendues. Choisissez les pages que vous voulez et réglez la résolution à 600 pixels/pouce (j'ai trouvé 300 trop de netteté dans de nombreux cas). Enregistrez au format souhaité avec "Fichier/exportation"
Quoi qu'il en soit, il doit y avoir un indicateur pour sélectionner les pages souhaitées à partir de la ligne de commande.
En regardant le code source de gscan2pdf, j'ai remarqué qu'il utilise pdfimages. Donc pdfimages file.pdf page
entraînerait page-001.ppm, page-002.ppm
etc.
Ce qui n'est pas clair dans votre question est de savoir si vous parlez de texte et de graphiques vectoriels dans votre pdf, ou si votre pdf contient des images incorporées.
Après avoir lu de quoi parle gscan2pdf, je suppose que vos fichiers pdf contiennent (uniquement) des graphiques intégrés.
convert
"imprime" essentiellement votre pdf sans tenir compte de son contenu. Comme le suggère @cjm, vous souhaiterez peut-être modifier la densité d'impression. C'est le seul moyen d'augmenter la qualité des graphiques vectoriels.
Si au lieu de cela, vous voulez extraire des images intégrées (un peu comme gscan2pdf semble le faire), deviner la densité entraînera généralement une perte de qualité ou une qualité supérieure à celle requise (et un gaspillage d'espace disque). La réponse est alors d'extraire l'image plutôt que d'imprimer le pdf. Voir cet article qui préconise essentiellement l'utilisation de pdfimages
pour extraire des images sans perte de qualité.