A última vez que usei convert
para essa tarefa, especifiquei explicitamente o tamanho do destino via redimensionamento:
$ 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
O convert
comando nem sempre usa o DPI como unidade padrão de densidade / formato de página; portanto, especificamos explicitamente o DPI com a -units
opção (caso contrário, você poderá obter resultados diferentes com diferentes combinações de versões / formatos de entrada). O novo tamanho (especificado via -resize
) é a dimensão de uma página DIN A4 em pixels. O argumento de redimensionamento especifica o tamanho máximo da página. Qual resolução e qualidade escolher exatamente depende do caso de uso - selecionei 150 DPI e qualidade média para economizar espaço, embora não pareça muito ruim quando impresso em papel.
Observe que, convert
por padrão, não altera a proporção da imagem com a operação de redimensionamento:
Redimensionar ajustará a imagem ao tamanho solicitado. NÃO preenche, o tamanho da caixa solicitada.
( Manual ImageMagick )
Dependendo da versão do ImageMagick e dos formatos de entrada envolvidos, pode ser correto omitir a -repage
opção. Às vezes, porém, é necessário e, sem essa opção, o cabeçalho do PDF pode conter dimensões muito pequenas. De qualquer forma, -repage
não deve doer.
Os cálculos usam aritmética inteira, uma vez que bash
apenas suporta isso. Com zsh
as expressões podem ser simplificadas - ou seja, substituídas por $((i*8.27))x$((i*11.69))
.
Imagens de Lineart
Se os arquivos PNG forem imagens em dois níveis (preto e branco, também conhecido como linear), a img2pdf
ferramenta produzirá resultados superiores ao ImageMagick convert
. Isso significa que img2pdf
é mais rápido e produz PDFs menores.
Exemplo:
$ img2pdf -o multipage.pdf a.png b.png
ou:
$ img2pdf --pagesize A4 -o multipage.pdf a.png b.png
-repage a4
eu recebo uminvalid argument for option '-repage': a4
-repage
ele não suporta mais o nome a4. Eu trabalhei em torno desta via aritmética shell:-repage $((150*8.27))x$((150*11.69))
-density 150
era importante acrescentar argumentos.O que você realmente deseja usar é:
-extent
na verdade, estende a imagem para 1240x1753, enquanto-resize
mantém a proporção da imagem, ajustando-a em um1240x...
ou em...x1753
.O
-gravity
parâmetro é opcional, mas pode ser usado para centralizar a imagem ao estender.fonte
-extent
é realmente o que eu quero usar :) - por favor, adicione a citação esquerda perdida na frente de -extent, obrigado!Além da resposta de caugner :
depois de instalar o IM v6.6.9-7, descobri que o
-gravity
parâmetro precisa ser colocado no meio-resize
e-extent
ter efeito.Além disso (embora não faça parte da pergunta operacional), achei a definição de um recurso de cor de fundo diferente, o que resultaria no comando total de
outra variação útil que costumo usar quando não quero redimensionar uma imagem que já vem na proporção correta, mas mantém sua resolução individual
onde a densidade de destino é determinada dinamicamente calculando a largura dividida por 8,27 (que é a largura em polegadas de uma página A4). o
-repage a4
parâmetro pode ser omitido na maioria das vezes, mas tive alguns casos em que o .pdf resultante teria um formato diferente ligeiramente das dimensões A4 de 210x297mm (8,27x11,6 ")fonte
Achei o código de Mikher muito útil, no entanto, ele expõe o PDF inteiramente como Retrato ou Paisagem, então eu o modifiquei para verificar o layout de cada arquivo de entrada e combiná-lo na saída.
Não incluí a edição do Yotam, pois ela funciona sem ela na minha caixa do Ubuntu 15.04.
fonte
Acho conveniente o seguinte script, que combina as respostas listadas aqui, além de alguns problemas que tive com o cálculo de ponto flutuante:
O script é chamado (salvo como um arquivo images2pdf)
/ edit: Adicionado "-l" sinalizador de acordo com o comentário de tanius para melhor precisão.
fonte
$(echo "150*8.27" | bc)
ainda não é ótimo para ponto flutuante. Funciona aqui porque é uma multiplicação. Pois$(echo "150/8.27" | bc)
, o resultado é18
(truncado para inteiro). Em vez disso, liguebc
com mais altoscale
:,$(echo "150/8.27" | bc -l)
os resultados são18.137847…
.Eu também estava lutando com essas coisas. Com base nas informações acima, escrevi um script que adiciona arquivos de imagem classificados em ordem alfabética em um único PDF.
Algumas variáveis são configuráveis dentro do script. Depende do ImageMagick e do pdftk.
Nota: Se a imagem de entrada tiver uma resolução mais alta (dpi) que a resolução desejada de output.pdf, a imagem será reamostrada para a resolução mais baixa. Caso contrário, a imagem não será amostrada novamente e somente será estendida para caber na tela da página.
fonte
-set density $ImgDens
para-density $ImgDens
Eu recomendo o programa CLI Python
img2pdf
para conversão sem perdas:https://gitlab.mister-muffin.de/josch/img2pdf
Exemplo de uso:
fonte
Acabei de usar algo semelhante à resposta maxschlepzigs no Ubuntu 16.04 / ImageMagick
Isso também centraliza o resultado
fonte
Eu queria converter uma imagem em um tamanho de página de 5,00 x 8,00 polegadas (visualizado no Adobe Reader) Aqui está o que eu fiz no sistema operacional ubuntu 18.04. Primeiro, descubra o tamanho da página que eu procuro da seguinte forma:
E o retorno é: Tamanho da página: 360 x 576 pts
Em seguida, a imagem é convertida em um PDF do mesmo tamanho da seguinte forma:
Nota: para instalar o img2pdf
fonte