love jpg gratis documento convertir convert conversion como calidad archivo alta image pdf png imagemagick ghostscript

image - jpg - pdf a png i love pdf



Convertir un PDF a PNG (9)

Estoy tratando de convertir un PDF a una imagen PNG (al menos la portada de uno). Estoy extrayendo con éxito la primera página del PDF con pdftk. Estoy usando imagemagick para hacer la conversión:

convert cover.pdf cover.png

Esto funciona, pero desafortunadamente el cover.png aparece incorrectamente (algunos de los objetos alfa en el PDF no se representan correctamente). Sé que ImageMagick usa GhostScript para hacer la conversión y si lo hago directamente con gs puedo obtener los resultados deseados, pero preferiría usar la biblioteca de conversiones ya que tiene otras herramientas que me gustaría aprovechar.

Este comando en GhostScript logra la imagen deseada:

gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf

Me pregunto si hay alguna manera de pasar argumentos a través de convertir a GhostScript o me veo obligado a llamar a GhostScript directamente?


Agregaré mi solución, incluso si su hilo es viejo. Quizás esto ayude a alguien de todos modos.

Primero, necesito generar el PDF. Yo uso XeLaTeX para eso:

xelatex test.tex

Ahora, ImageMagick y GraphicMagic analizan parámetros de izquierda a derecha, por lo que el parámetro más a la izquierda se ejecutará primero. Terminé usando esta secuencia para un procesamiento óptimo:

gm convert -trim -transparent white -background transparent -density 1200x1200 -resize 25% test.pdf test.png

Ofrece buenos gráficos en un fondo transparente, recortados a lo que realmente está en la página. Los parámetros de -density y -resize dan una granularidad mejorada y aumentan la resolución general.

Sugiero verificar si la densidad puede disminuirse para usted. Reducirá el tiempo de conversión.


Aquí hay una discusión alemana sobre un problema como este para archivos SVG donde se resuelve mediante el uso de

convert -background transparent

Quizás esto también funcione para ti.


De todas las alternativas disponibles, encontré a Inkscape para producir los resultados más precisos al convertir archivos PDF a PNG. Especialmente cuando el archivo fuente tenía capas transparentes, Inkscape tuvo éxito donde Imagemagick y otras herramientas fallaron.

Este es el comando que uso:

inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"

Y aquí está implementado en un script:

#!/bin/bash while [ $# -gt 0 ]; do pdf=$1 echo "Converting "$pdf" ..." pngfile=`echo "$pdf" | sed ''s//./w*$/.png/''` inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile" echo "Converted to "$pngfile"" shift done echo "All jobs done. Exiting."


Mi solución es mucho más simple y directa. Al menos funciona de esa manera en mi PC (con las siguientes especificaciones):

me@home: my.folder$ uname -a Linux home 3.2.0-54-generic-pae #82-Ubuntu SMP Tue Sep 10 20:29:22 UTC 2013 i686 i686 i386 GNU/Linux

con

me@home: my.folder$ convert --version Version: ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC Features: OpenMP

Entonces, esto es lo que corro en mi file.pdf :

me@home: my.folder$ convert -density 300 -quality 100 file.pdf file.png


No se pudo lograr que la respuesta aceptada funcione. Luego descubrió que en realidad la solución es mucho más simple de todos modos, ya que Ghostscript no solo es compatible nativamente con PNG, sino incluso con múltiples "codificaciones" diferentes :

  • png256
  • png16
  • pnggray
  • pngmono
  • ...

El comando de shell que funciona para mí es:

gs -dNOPAUSE -q -sDEVICE=pnggray -r500 -dBATCH -dFirstPage=2 -dLastPage=2 -sOutputFile=test.png test.pdf

Salvará la página 2 de test.pdf a test.png usando la codificación pnggray y 500 DPI.


Para convertir archivos PDF a imágenes, use los siguientes comandos:

Para PNG gs -sDEVICE=png16m -dTextAlphaBits=4 -r300 -o a.png a.pdf

Para JPG gs -sDEVICE=jpeg -dTextAlphaBits=4 -r300 -o a.jpg a.pdf

Si tiene varias páginas, agregue el nombre % 03d gs -oa%03d.jpg a.pdf

Qué significa cada opción:

  • sDEVICE = {jpeg, pngalpha, png16m ...} - filetype
  • -o - archivo de salida (% stdout a stdout)
  • -dTextAlphaBits = 4 - antialiasing de fuente.
  • -r300 - 300 dpi

Para un PDF que ImageMagick estaba dando colores inexactos descubrí que GraphicsMagick hizo un mejor trabajo:

$ gm convert -quality 100 -thumbnail x300 -flatten journal.pdf/[0/] cover.jpg


Puede usar una línea de comando con dos comandos ( gs , convert ) conectados a través de un conducto, si el primer comando puede escribir su salida a stdout, y si el segundo puede leer su entrada desde stdin.

  1. Afortunadamente, gs puede escribir en stdout ( ... -o %stdout ... ).
  2. Afortunadamente, convert puede leer de stdin ( convert -background transparent - output.png ).

Problema resuelto:

  • GS utilizado para el manejo de canales alfa de una imagen especial,
  • conversión utilizada para crear fondo transparente,
  • pipa usada para evitar escribir un archivo temporal en el disco.

Solución completa:

gs -sDEVICE=pngalpha / -o %stdout / -r144 cover.pdf / | / convert / -background transparent / - / cover.png

Actualizar

Si desea tener un archivo PNG separado por página PDF, puede usar la sintaxis %d :

gs -sDEVICE=pngalpha -o file-%03d.png -r144 cover.pdf

Esto creará archivos PNG llamados page-000.png , page-001.png , ... (Tenga en cuenta que el %d -counting está basado en cero - file-000.png corresponde a la página 1 del PDF, 001 a página 2...

O, si desea mantener su fondo transparente, para un PDF de 100 páginas, haga

for i in {1..100}; do / / gs -sDEVICE=pngalpha / -dFirstPage="${i}" / -dLastPage="${i}" / -o %stdout / -r144 input.pdf / | / convert / -background transparent / - / page-${i}.png ; / / done


También se pueden usar las utilidades de línea de comando incluidas en el paquete poppler-utils :

sudo apt-get install poppler-utils pdftoppm --help pdftocairo --help

Ejemplo:

pdftocairo -png mypage.pdf mypage.png