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.
- Afortunadamente, gs puede escribir en stdout (
... -o %stdout ...
). - 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