La última vez que utilicé convert
para tal tarea, especifiqué explícitamente el tamaño del destino mediante el cambio de tamaño:
$ i=150; convert a.png b.png -compress jpeg -quality 70 \
-density ${i}x${i} -units PixelsPerInch \
-resize $((i*827/100))x$((i*1169/100)) \
-repage $((i*827/100))x$((i*1169/100)) multipage.pdf
El convert
comando no siempre usa DPI como unidad de densidad / formato de página predeterminada, por lo tanto, especificamos explícitamente DPI con la -units
opción (de lo contrario, puede obtener resultados diferentes con diferentes versiones / combinaciones de formatos de entrada). El nuevo tamaño (especificado mediante -resize
) es la dimensión de una página DIN A4 en píxeles. El argumento de cambio de tamaño especifica el tamaño máximo de página. Qué resolución y calidad elegir exactamente depende del caso de uso: seleccioné 150 DPI y calidad promedio para ahorrar algo de espacio mientras no se ve tan mal cuando se imprime en papel.
Tenga en cuenta que, convert
por defecto, no cambia la relación de aspecto con la operación de cambio de tamaño:
Cambiar el tamaño se ajustará a la imagen en el tamaño solicitado. NO llena, el tamaño de caja solicitado.
( Manual de ImageMagick )
Dependiendo de la versión de ImageMagick y los formatos de entrada involucrados, podría estar bien omitir la -repage
opción. Pero a veces es obligatorio y sin esa opción, el encabezado del PDF podría contener dimensiones demasiado pequeñas. En cualquier caso, el -repage
no debería doler.
Los cálculos usan aritmética de enteros ya que bash
solo es compatible con eso. Con zsh
las expresiones se puede simplificar, es decir, reemplazar con $((i*8.27))x$((i*11.69))
.
Lineart Images
Si los archivos PNG son imágenes de dos niveles (también conocido como lineart en blanco y negro), la img2pdf
herramienta produce resultados superiores sobre ImageMagick convert
. Eso significa que img2pdf
es más rápido y produce archivos PDF más pequeños.
Ejemplo:
$ img2pdf -o multipage.pdf a.png b.png
o:
$ img2pdf --pagesize A4 -o multipage.pdf a.png b.png
-repage a4
obtengo uninvalid argument for option '-repage': a4
-repage
ya no es compatible con el nombre a4. He trabajado alrededor de esto a través de la aritmética de shell:-repage $((150*8.27))x$((150*11.69))
-density 150
era importante agregar un argumento.Lo que realmente quieres usar es:
-extent
en realidad extiende la imagen para que sea 1240x1753, mientras-resize
mantiene la proporción de la imagen, ajustándola en1240x...
o...x1753
.El
-gravity
parámetro es opcional pero se puede usar para centrar la imagen cuando se extiende.fuente
-extent
es realmente lo que quiero usar :) - por favor, agregue la cita izquierda perdida delante de - extensión, ¡gracias!Además de la respuesta de Caugner :
Después de instalar IM v6.6.9-7 descubrí que el
-gravity
parámetro debe colocarse en el medio-resize
y-extent
tener un efecto.Además (aunque no es parte de la pregunta operativa), encontré que establecer un color de fondo diferente era atractivo, lo que resultaría en el comando total de
Otra variación útil que uso a menudo cuando no quiero volver a escalar una imagen que ya viene en la relación de aspecto correcta, pero mantener su resolución individual es
donde la densidad objetivo se determina dinámicamente calculando el ancho dividido por 8.27 (que es el ancho en pulgadas de una página A4). el
-repage a4
parámetro se puede omitir la mayor parte del tiempo, pero he tenido algunos casos en los que el .pdf resultante tendría un formato diferente a las dimensiones A4 de 210x297 mm (8.27x11.6 ")fuente
Encontré el código de Mikher muy útil, sin embargo, presenta el PDF completamente como Vertical u Horizontal, por lo que lo modifiqué para verificar el diseño de cada archivo de entrada y hacer que coincida en la salida.
No incluí la edición de Yotam, ya que funciona sin ella en mi caja Ubuntu 15.04.
fuente
Me parece conveniente el siguiente script que combina las respuestas enumeradas aquí, así como algunos problemas que tuve con el cálculo de coma flotante:
Se llama al script (guardado como un archivo images2pdf)
/ edit: Se agregó el indicador "-l" según el comentario de tanius para una mejor precisión
fuente
$(echo "150*8.27" | bc)
todavía no es excelente para coma flotante. Funciona aquí porque es una multiplicación. Sin$(echo "150/8.27" | bc)
embargo, el resultado es18
(truncado a entero). En cambio, llamebc
con mayorscale
:$(echo "150/8.27" | bc -l)
los resultados son18.137847…
.Yo también estaba luchando con esas cosas. Basado en la información anterior, escribí un script que agrega archivos de imagen ordenados alfabéticamente en un solo PDF.
Algunas variables son configurables dentro del script. Depende de ImageMagick y pdftk.
Nota: si la imagen de entrada tiene una resolución más alta (ppp) que la resolución deseada de output.pdf, la imagen se muestrea a la resolución más baja. De lo contrario, la imagen no se vuelve a muestrear y solo se extiende para adaptarse al lienzo de la página.
fuente
-set density $ImgDens
a-density $ImgDens
Recomiendo encarecidamente el programa Python CLI
img2pdf
para la conversión sin pérdidas:https://gitlab.mister-muffin.de/josch/img2pdf
Ejemplo de uso:
fuente
Acabo de usar algo similar a la respuesta maxschlepzigs en Ubuntu 16.04 / ImageMagick
Esto también centra el resultado
fuente
Quería convertir una imagen al tamaño de página de 5.00 x 8.00 pulgadas (visto desde Adobe Reader) Esto es lo que hice en ubuntu 18.04 OS. Primero, averigua el tamaño de página que busco así:
Y el retorno es: Tamaño de página: 360 x 576 pts
Luego, la imagen se convierte a un PDF del mismo tamaño de la siguiente manera:
Nota: para instalar img2pdf
fuente