converta vários png para um pdf

4

Eu tenho 280 arquivos pgn que quero mesclar e converter em um pdf.

Os nomes dos arquivos PNG estão na sequência p000.png, p001.png etc e o espaço total é de cerca de 30mb.

eu fiz:

convert p00*.png to myfile.pdf 

e funcionou bem. Sorte suficiente na ordem certa.

Mas quando eu faço:

conver p*.png to myfile.pdf

Ele consome todos os meus 4Gb de memória e metade do meu swap. Em seguida, ele trava com o erro

convert: memory allocation failed 'myfile.pdf' @ error/pdf.c/WritePDFImage/1595.

Alguma ideia de como solucionar esse problema?

Acho que uma solução boa o suficiente seria usar convert um arquivo de cada vez para o pdf, com o mesmo nome. Em seguida, use pdfunite ou pdftk para mesclá-los. Mas eu não sei como usar convert dessa maneira.

    
por Presbitero 19.02.2013 / 20:23

1 resposta

7

O Imagemagick parece ser muito violento com o uso da memória. Uma sugestão é usar -limit para limitar o tamanho da memória que o convert irá usar, ele deve usar um cache de disco para qualquer outra coisa que ele precise. Leia uma explicação aqui:

link

Veja como usar a opção -limit: link

Se não, você pode fazer como descreve, convertendo cada imagem individualmente e, em seguida, mesclando-as com alguma outra ferramenta. Algo como

for name in p*.png; do convert $name 'basename $name .png'.pdf; done

deve fazer isso.

Basicamente ele itera sobre todos os arquivos png, roda convertidos neles, a única mágica é a basename $name .png part, que será substituída pelo nome do arquivo menos a parte .png, de modo que ao anexar a extensão .pdf a ela, o nome do arquivo faz sentido.

Tente você mesmo para ter uma idéia do que o basename faz:

basename something.png .png
echo 'basename something.png .png'.pdf
    
por roadmr 19.02.2013 / 20:57

Tags