pdf a jpg sin pérdida de calidad; gscan2pdf

51

Cuando convierto un archivo pdf en un montón de archivos jpg usando

convert -quality 100 file.pdf page_%04d.jpg

Tengo una pérdida de calidad apreciable.

Sin embargo, si hago lo siguiente, no hay pérdida de calidad (notable):

Inicie gscan2pdf, elija file-> import (y elija file.pdf). Luego vaya al directorio temporal de gscan2pdf. Hay muchos archivos pnm (uno para cada página del archivo pdf). Ahora lo hago

  for file in *.pnm; do            
  convert $file $file.jpg done

Los archivos jpg resultantes son (aproximadamente) de la misma calidad que el pdf original (que es lo que quiero).

Ahora mi pregunta es, si hay una forma simple de línea de comandos para convertir el archivo pdf a un montón de archivos jpg sin pérdida de calidad notable. (La solución anterior es demasiado complicada y lleva mucho tiempo).

estudiante
fuente
Lo que no está claro en sus preguntas es si habla de texto y gráficos vectoriales en su pdf, o si quiere extraer imágenes incrustadas.
asoundmove

Respuestas:

92

No está claro qué quiere decir con "pérdida de calidad". Eso podría significar muchas cosas diferentes. ¿Podría publicar algunas muestras para ilustrar? Quizás elimine la misma sección de las versiones de mala calidad y buena calidad (como PNG para evitar una mayor pérdida de calidad).

Tal vez necesite usar -densitypara hacer la conversión a un dpi más alto:

convert -density 300 file.pdf page_%04d.jpg

(Puede anteponer -units PixelsPerIncho -units PixelsPerCentimetersi es necesario. Mi copia está predeterminada en ppi).

Actualización: como señaló, gscan2pdf(la forma en que lo está usando) es solo un contenedor para pdfimages(de poppler ). pdfimagesno hace lo mismo que convertcuando se le da un PDF como entrada.

convert toma el PDF, lo renderiza con cierta resolución y usa el mapa de bits resultante como imagen de origen.

pdfimagesbusca en el PDF imágenes de mapa de bits incrustadas y exporta cada una a un archivo. Simplemente ignora cualquier comando de texto o dibujo vectorial en el PDF.

Como resultado, si lo que tiene es un PDF que es solo un contenedor alrededor de una serie de mapas de bits, pdfimageshará un trabajo mucho mejor al extraerlos, ya que le proporciona los datos sin procesar en su tamaño original. Probablemente también desee utilizar la -jopción pdfimages, porque un PDF puede contener datos JPEG sin procesar. Por defecto, pdfimagesconvierte todo a formato PNM, y convertir JPEG> PPM> JPEG es un proceso con pérdida.

Entonces, intenta

pdfimages -j file.pdf page

Usted puede o no necesitar seguir que con un converta .jpgpaso (dependiendo de qué mapa de bits formato pdf estaba usando).

Probé este comando en un PDF que hice a partir de una secuencia de imágenes JPEG. Los archivos JPEG extraídos eran byte por byte idénticos a las imágenes de origen. No se puede obtener una calidad superior a esa.

cjm
fuente
+1 Estoy muy contento de no haberme sometido al esnobismo leyendo mal una de tus oraciones inspiradas en mí y de hecho probé pdfimages, ¡probablemente el programa más útil que he usado en meses! ¡Animaría a todos a probarlo!
ixtmixilix
@ixtmixilix, tengo curiosidad. ¿Qué leíste mal y cómo?
cjm
¡Bastante impresionante! Resuelto mi día ¡Gracias!
Geppettvs D'Constanzo
convertTampoco es práctico para archivos PDF grandes. Por ejemplo, se necesitaron 45 GB de memoria para procesar un libro de 700 páginas de 6 megapíxeles. También tomó alrededor de mil veces más que pdfimages.
Camille Goudeseune
Por el contrario, convierta las imágenes en un pdf, o mejor, ajuste las imágenes en un pdf, use img2pdf, aquí: gitlab.mister-muffin.de/josch/img2pdf (envuelve jpg y jpg2000 en un pdf).
erik
4

Como dijo la respuesta del estudiante, pdfimageses una buena opción. Desde mi experiencia tanto gsy convertde exportación a la mala calidad sin tener en cuenta si se especifica el derecho dpi.

Pero si el pdf tiene varias capas por página pdfimagesno funciona y extrae las capas como una imagen separada, en ese caso lo mejor es usar inskcapepara exportar la página como se ve.

Estos son los comandos que uso:

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

El primer comando divide todas las páginas, el segundo comando convierte página por página a png. Puede mantenerlos png o simplemente convertirlos a JPEG

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg

En comparación con pdfimages, gsy ImageMagick's convert, encuentro que inkscapela exportación es la mejor en calidad.

Eduard Florinescu
fuente
3

la respuesta de @cjm es correcta, pero si te gusta la GUI y no quieres renderizar todas las páginas pdf, solo para obtener alguna imagen, usa gimp.

Abra un pdf con gimp y obtendrá una ventana de importación con todas las páginas renderizadas. Elija las páginas que desee y establezca la resolución en 600 píxeles / pulgada (encontré 300 demasiado afiladas en muchos casos). Guarde en el formato que desee con "Archivo / exportar"

De todos modos, debe haber una bandera para seleccionar las páginas deseadas desde la línea de comandos.

albfan
fuente
2

Al mirar el código fuente de gscan2pdf, noté que usa imágenes pdf. Entonces pdfimages file.pdf pageresultaría en page-001.ppm, page-002.ppmetc.

estudiante
fuente
pdfimages realmente hace el trabajo
Eduard Florinescu 03 de
2

Lo que no está claro en su pregunta es si habla de texto y gráficos vectoriales en su pdf, o si su pdf contiene imágenes incrustadas.

Después de leer de qué se trata gscan2pdf, supongo que sus archivos pdf contienen (solo) gráficos incrustados.

convertesencialmente "imprime" su pdf sin tener en cuenta cuál es el contenido. Como sugiere @cjm, es posible que desee cambiar la densidad de impresión. Esta es la única forma de aumentar la calidad de los gráficos vectoriales.

Si, en cambio, lo que desea hacer es extraer imágenes incrustadas (al igual que parece hacer gscan2pdf), adivinar la densidad generalmente conducirá a una pérdida de calidad o una calidad superior a la requerida (y pérdida de espacio en disco). La respuesta es extraer la imagen en lugar de imprimir el pdf. Vea este artículo que básicamente aboga por el uso pdfimagespara extraer imágenes sin pérdida de calidad.

asoundmove
fuente