Como alterar o DPI de um arquivo PNG? (na linha de comando, sem o ImageMagick)

9

Estou procurando uma maneira de alterar o DPI em arquivos de imagem PNG. Usando o ImageMagick isso é fácil:

$ convert -density 150 -units pixelsperinch file.png file.png

O problema é que vou executar este comando a partir do meu aplicativo, rodando em várias VMs, que não possuem o ImageMagick instalado. Eu posso enviar os pacotes de atualização para essas VMs, mas no caso do ImageMagick isso adicionaria cerca de 30 MB a um pacote de upgrade, o que é um pouco demais para o meu caso de uso.

Longa história curta : há alguma maneira de alterar o DPI em um arquivo PNG usando uma ferramenta de linha de comando pequena (como no tamanho do pacote)?

Opcionalmente, alterar os bytes em um arquivo de imagem não processada também seria bom, se alguém souber onde procurá-los ...

    
por johndodo 18.09.2013 / 09:42

5 respostas

6

2.10 MB é pequeno o suficiente? Se sim, use NConvert e um comando em lote como:

nconvert -out png -dpi 150 -keepdocsize -keepfiledate mysource.png

Para que é o NConvert?

XnView é um aplicativo baseado em GUI, você pode alterar e manipular imagens usando uma interface gráfica do usuário. O NConvert tem os mesmos recursos do XnView, mas é uma ferramenta de linha de comando e não possui interface gráfica com o usuário. Você pode usar NConvert em scripts em lote ou outro aplicativo pode chamá-lo.

Links úteis

  • Guia para iniciantes e Wiki com alguns exemplos para começar
  • Arquivo de ajuda para ver quais parâmetros da linha de comando estão disponíveis (Uploaded on pastebin)
  • Um front-end gráfico usando o Nconvert é XnConvert . Use isso para criar & exportar arquivos em lote do Nconvert
  • Fórum para Xnconvert e Nconvert para
por 18.09.2013 / 15:25
1

Você mencionou que estaria executando este comando "de seu aplicativo", e isso me leva a acreditar que você escreveu esse aplicativo ou está mantendo-o. Dito isso, existem API do ImageMagick para vários idiomas, e você pode usar um deles para adicionar a funcionalidade diretamente em seu programa existente. O aumento no tamanho do pacote dependeria de qual idioma o aplicativo está escrito e se você vincula a biblioteca estaticamente ou dinamicamente, mas imagino que seria significativamente menor que um aumento de 30 MB.

Outra opção é não incluir todo o pacote ImageMagick. Você pode fazer o download do arquivo Zip ImageMagick (que tem apenas 13 MB BTW) e extrair apenas a ferramenta convert e suas dependências e distribuir isso para suas VMs. Existe uma ferramenta chamada Dependency Walker que você pode usar para determinar quais são as dependências da ferramenta convert .

    
por 27.09.2013 / 11:57
1

Use o sinal -size no programa netpbm pnmtopng . As unidades usadas são pixels por metro. O exemplo a seguir irá definir newfile.png para 300dpi.

pngtopnm <oldfile.png | pnmtopng -size='11811 11811 1' >newfile.png
    
por 25.07.2014 / 11:07
0

Bem, você poderia usar um script python.

#!/usr/bin/python
im = Image.open("in.png")
nx, ny = im.size
im2 = im.resize((int(nx*1.5), int(ny*1.5)), Image.BICUBIC)
im2.save("out.png")

Fonte .

    
por 18.09.2013 / 14:05
0

A linha de comando adequada do "Magia da Imagem" para isso seria usar o argumento -resample:

convert image.png -resample 150x150 -units pixelsperinch ../ImagesAdjusted/image.png
    
por 09.09.2017 / 22:24

Tags