Convertendo vários arquivos de imagem do formato JPEG para o formato PDF

45

Eu quero converter alguns arquivos de jpeg para pdf. Eu estou usando o seguinte comando.

$ convert image1.jpg image1.pdf 

Mas tenho 100 imagens. Como devo converter todos eles para os pdfs correspondentes?

Eu tentei

$ convert image*.jpg image*.pdf 

Não funciona.

    
por Pratik Deoghare 24.01.2012 / 11:27

12 respostas

58

No bash:

for f in *.jpg; do
  convert ./"$f" ./"${f%.jpg}.pdf"
done
    
por 24.01.2012 / 11:44
50

Você pode usar o comando mogrify para isso. Normalmente, ele modifica arquivos no local, mas ao converter formatos, ele grava um novo arquivo (apenas alterando a extensão para corresponder ao novo formato). Assim:

mogrify -format pdf -- *.jpg

(Como ./*.jpg da enzotib, o -- impede que qualquer nome de arquivo estranho seja interpretado como comutadores. A maioria dos comandos reconhece -- para "parar de procurar opções neste ponto".)

    
por 24.01.2012 / 13:01
24

sintaxe mais rápida, mas incomum:

parallel convert '{} {.}.pdf' ::: *.jpg

É executado em paralelo (usando link ). Eu não notei nenhum multi-threading em convert ainda, o que limitaria a paralelização efetiva. Se essa for a sua preocupação, consulte no comentário abaixo um método para garantir que não ocorra multi-threading.

    
por 10.02.2012 / 06:32
13

Aqui está uma maneira que combina o melhor das sugestões acima em uma linha de comando simples, eficiente e robusta:

find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +

Funciona bem com nomes de arquivos que começam com - ou contêm espaços. Observe o uso de -iname , que é a versão insensível a maiúsculas de -name , de modo que funcionará em .JPG tão bem quanto em .jpg .

Isso usa find para obter a lista de arquivos em vez do shell globbing com o curinga *.jpg , o que pode resultar em um 'Argumento muito longo' erro em alguns sistemas. Embora como @enzotib aponte em um comentário, o comportamento de usar globbing em um loop for é diferente dos argumentos de um comando .

Além disso, find manipulará os subdiretórios, enquanto o shell globbing não funcionará, a menos que você tenha recursos específicos do shell, como a sintaxe de globulação recursiva **/*jpg em zsh.

EDIT: Eu pensei em adicionar outro recurso útil de find que eu pensei depois de ler um comentário por sobre re-executar o comando e apenas converter arquivos que foram alterados desde a primeira execução.

Na primeira passagem, você pode touch um arquivo de carimbo de data / hora após a conclusão da conversão.

find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +; touch timestamp

Em seguida, adicione -newer timestamp à expressão find para operar no subconjunto de arquivos cujo horário da última modificação é mais recente que o arquivo de registro de data e hora. Continue atualizando o arquivo de carimbo de data / hora após cada execução.

find /path/to/files -iname '*.jpg' -newer timestamp -exec mogrify -format pdf {} +; touch timestamp

Esta é uma maneira fácil de evitar ter que recorrer a um Makefile (a menos que você já esteja usando um) e é outra boa razão pela qual vale a pena usar find sempre que possível ... tem expressividade versátil enquanto permanece conciso.

    
por 30.01.2012 / 22:50
11

link

Em todas as soluções propostas envolvendo o ImageMagick, os dados JPEG são totalmente decodificados e recodificados. Isso resulta em perda de geração , bem como desempenho "dez a cem" vezes pior do que img2pdf .

Pode ser instalado com pip img2pdf desde que você tenha dependências (por exemplo, apt-get install python python-pil python-setuptools libjpeg-dev ou yum install python python-pillow python-setuptools ).

    
por 01.05.2013 / 22:07
8

Você pode fazer isso com convert diretamente. Isso pode ser encontrado na parte inferior do Site do ImageMagicks sobre Processamento de linha de comando .

convert *.jpg +adjoin page-%d.pdf
    
por 09.05.2014 / 14:25
7

Eu usei o seguinte makefile para algo semelhante:

SVG = $(wildcard origs/*.svg)
PNG = $(patsubst origs/%.svg,%.png,$(SVG))

all: $(PNG)

%.png: origs/%.svg
    convert -resize "64x" $< $@


clean: 
    rm $(PNG)

Agora, posso executar apenas make e obter arquivos png para cada arquivo svg existente.

Editar

Conforme solicitado:

  • curingas gera uma lista de todos os svgs em origs /
  • pathsubst pega essa lista e produz uma lista de nomes de arquivo png (pasta e extensão diferentes. Exemplo: origs/foo.svg se torna foo.png )
  • Regra 1: all: $(PNG) define que o destino "all" depende de todos os PNGs
  • Regra 2: %.png: origs/%.svg define, o arquivo $ X.png depende de origs / $ X.svg e pode ser gerado chamando convert ... $< $@ .
    • $< é a dependência ee
    • $@ é o nome de destino
  • REGRA 3: é apenas para limpeza
por 24.01.2012 / 14:40
0

Um roteiro minúsculo faria o truque. (testado com o ksh88 no Solaris 10)

script.ksh

#!/bin/ksh

[[ $# != 1 ]] && exit 255 # test for nr of args

pdfname=$(sed -e 's/\(.*\)\.jpg/\.pdf/' <(echo $"1")) #replace *.jpg with *.pdf
convert "$1" $pdfname

Em seguida, você pode executar find para executar o script:

find dir -name image\*.jpg -exec /bin/ksh script.ksh {} \;

Observe que o comando script.ksh e find que forneci a você pode ter diferentes sintaxes depostas no sistema operacional e no shell que você está usando.

    
por 24.01.2012 / 11:41
0

Eu consegui resolver com imagemagick para conversão e paralelamente ajude-me a acelerar meu processo de conversão:

ls *.JPEG |parallel convert -density 200 -resize 496X646 -quality 100 {}  ../{.}.PDF

Grettings

    
por 12.11.2015 / 20:05
0

O utilitário MacOS SIPS No MacOS (Sierra), o utilitário de linha de comando interno da Apple sips fornece acesso abrangente a todos os utilitários de imagem raster da Apple; Isso acaba por incluir a conversão de jpg para pdf .

Por exemplo, de uma jpg imagem 'cat.jpg' (de tamanho 8401 bytes) de baixa resolução / tamanho pequeno existente, a seguinte linha de comando cria 'cat.pdf' , sem alteração na resolução de varredura e expansão mínima do tamanho do arquivo:

$ sips -s format pdf cat.jpg --out 'cat.pdf' 1>/dev/null 2>&1
$ ls -l cat.*
-rw-r--r--@ 1 <user redacted> <group redacted>  8401 Jun 18 07:06 cat.jpg
-rw-r--r--+ 1 <user redacted> <group redacted> 10193 Jun 18 07:22 cat.pdf

Conversão para o formato de imagem raster PSD da Adobe Um idioma sips semelhante cria arquivos *.psd compatíveis com Adobe

$ sips -s format psd cat.jpg --out 'cat.psd' 1>/dev/null 2>&1
$ ls -l cat.jpg cat.psd
-rw-r--r--@ 1 Administration  staff    8401 Jun 18 07:06 cat.jpg
-rw-r--r--+ 1 Administration  staff  350252 Jun 18 07:37 cat.psd

Observe, no entanto, a expansão de tamanho de arquivo de 30 dobras que acompanha o uso do formato de raster Adope psd .

Produção de livros Ao fazer produção de livros em grande escala, envolvendo centenas de imagens, fornecidas em vários formatos, para mim um idioma de linha de comando conveniente foi usar ImageMagick utilitários para criar arquivos de imagem de rasterização no formato png (com todos os metadados e perfis de cores removidos), use sips para restaurar um conjunto uniforme de perfis de cores e / ou comentários e use sips também para gerar o final arquivos de saída (mais comumente *.png , *.psd ou *.pdf arquivos).

    
por 18.06.2017 / 16:45
0

Infelizmente, convert altera a imagem antes para ter uma perda mínima de qualidade do original jpg você precisa usar img2pdf , eu uso este comando:

1) Isso transforma um arquivo pdf em cada jpg imagem sem perda de resolução ou qualidade:

ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf

2) Isso para concatenar as páginas pdf em uma:

pdftk *.pdf cat output combined.pdf

3) E, por último, adiciono uma camada de texto com OCR que não altera a qualidade da verificação nos PDFs para que possam ser pesquisáveis:

pypdfocr combined.pdf  
    
por 13.01.2018 / 17:35
-1

Se você usar apenas arquivos de imagem, talvez queira usar Arquivo de histórias em quadrinhos (.cbr, .cbz, .cbt, .cba, .cb7)

  • Se você usar 7Z, renomeie a extensão do arquivo (sufixo) como .cb7
  • Se você usar o ACE, renomeie a extensão do arquivo (sufixo) para .cba
  • Se você usar o RAR, renomeie a extensão do arquivo (sufixo) como .cbr
  • Se você usar TAR, renomeie a extensão do arquivo (sufixo) como .cbt
  • Se você usar ZIP, renomeie a extensão do arquivo (sufixo) como .cbz

Isso é muito mais flexível que o PDF.

Under Linux you can use software like Comix, Evince, Okular and QComicBook.

link

    
por 01.02.2012 / 02:01