Estou procurando uma maneira de alterar o DPI nos arquivos de imagem PNG. Usando o ImageMagick, é fácil:
$ convert -density 150 -units pixelsperinch file.png file.png
O problema é que executarei esse comando no meu aplicativo, executando em várias VMs, que não têm o ImageMagick instalado. 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 atualização, o que é um pouco demais para o meu caso de uso.
Para encurtar a história : existe uma maneira de alterar o DPI em um arquivo PNG usando uma pequena ferramenta de linha de comando (como no tamanho do pacote)?
Opcionalmente, alterar bytes em um arquivo de imagem bruto também seria bom, se alguém souber onde procurá-los ...
pHYs
pedaço pré-fabricado de um PNG criado no Photoshop.Respostas:
2,10 MB é pequeno o suficiente? Se sim, use NConvert e um comando em lote como:
Para que serve o NConvert?
O XnView é um aplicativo baseado em GUI, você pode alterar e manipular imagens usando uma interface gráfica do usuário. O NConvert possui 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 o NConvert em scripts em lote ou outro aplicativo pode chamá-lo.
Links úteis
fonte
Você mencionou que estaria executando este comando "do seu aplicativo" e isso me leva a acreditar que você escreveu esse aplicativo ou está mantendo-o. Dito isto, existem APIs do ImageMagick para vários idiomas e você pode usar um deles para adicionar a funcionalidade diretamente ao seu programa existente. O aumento no tamanho do pacote dependerá do idioma em que seu aplicativo está escrito e se você vinculará a biblioteca estaticamente ou dinamicamente, mas eu imagino que seria significativamente menor que um aumento de 30 MB.
Outra opção é não incluir todo o pacote ImageMagick. Você pode baixar o arquivo Zip do ImageMagick (que tem apenas 13 MB BTW), extrair apenas a
convert
ferramenta e suas dependências e distribuí-la às suas VMs. Existe uma ferramenta chamada Dependency Walker que você pode usar para determinar quais são as dependências daconvert
ferramenta.fonte
Use o
-size
sinalizador no programa netpbm pnmtopng . As unidades usadas são pixels por metro. O exemplo a seguir definirá newfile.png para 300 dpi.fonte
Bem, você poderia usar um script python.
Fonte .
fonte
A linha de comando apropriada da Image Magick "convert" para isso seria usar o argumento -resample:
fonte