Comment changer le DPI d'un fichier PNG? (en ligne de commande, sans ImageMagick)

9

Je cherche un moyen de modifier le DPI sur les fichiers image PNG. L'utilisation d'ImageMagick est simple:

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

Le problème est que je vais exécuter cette commande à partir de mon application, exécutée sur plusieurs machines virtuelles, sur lesquelles ImageMagick n'est pas installé. Je peux pousser les packages de mise à niveau vers ces machines virtuelles, mais dans le cas d'ImageMagick, cela ajouterait environ 30 Mo à un ensemble de mise à niveau, ce qui est un peu trop pour mon cas d'utilisation.

Pour faire court : existe-t-il un moyen de modifier le DPI sur un fichier PNG à l'aide d'un petit outil de ligne de commande (comme dans la taille du package)?

Facultativement, la modification des octets dans un fichier image brut serait également acceptable, si quelqu'un sait où les chercher ...

johndodo
la source
Vous pourriez envisager de faire votre propre implémentation. La manipulation des morceaux PNG est assez simple. Si vous n'avez l'intention d'appliquer qu'un seul DPI à chacun d'eux, vous n'avez même pas besoin d'avoir une fonction de somme de contrôle fonctionnelle - il suffit de copier un pHYsmorceau pré-créé à partir d'un PNG créé dans Photoshop.
Zdenek

Réponses:

6

La taille de 2,10 Mo est-elle suffisante? Si oui, utilisez NConvert et une commande batch comme:

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

À quoi sert NConvert?

XnView est une application basée sur une interface graphique, vous pouvez modifier et manipuler des images à l'aide d'une interface utilisateur graphique. NConvert a à peu près les mêmes capacités que XnView, mais c'est un outil en ligne de commande et n'a pas d'interface utilisateur graphique. Vous pouvez utiliser NConvert dans des scripts Batch ou une autre application peut l'appeler.

Liens utiles

  • Guide débutant et Wiki avec quelques exemples pour commencer
  • Fichier d'aide pour voir quels paramètres de ligne de commande sont disponibles (téléchargés sur pastebin)
  • Un frontal graphique utilisant Nconvert est XnConvert . Utilisez-le pour créer et exporter des fichiers batch Nconvert
  • Forum pour Xnconvert et Nconvert pour
nixda
la source
Merci, a fière allure et sera probablement utile à l'avenir! Dans ce cas, j'ai fini par étudier le format PNG (qui était heureusement assez simple) et changer les images via une petite application personnalisée (15 lignes en PHP).
johndodo
@johndodo Cela semble intéressant. Vous souhaitez partager votre candidature avec nous?
nixda
Malheureusement, je ne suis pas libre de le faire, mais vous pouvez faire de même en lisant une (excellente!) Spécification du format de fichier PNG et en créant une application qui modifie le bloc pHYs . C'est vraiment simple une fois que vous savez ce que vous faites.
johndodo
1

Vous avez mentionné que vous exécuteriez cette commande «à partir de votre application», ce qui m'amène à croire que vous avez écrit cette application ou que vous la maintenez. Cela dit, il existe des API ImageMagick pour plusieurs langues, et vous pouvez utiliser l'une d'entre elles pour ajouter la fonctionnalité directement dans votre programme existant. L'augmentation de la taille du package dépendra de la langue dans laquelle votre application est écrite et de la liaison statique ou dynamique de la bibliothèque, mais j'imagine qu'elle serait nettement inférieure à une augmentation de 30 Mo.

Une autre option consiste à ne pas inclure l'intégralité du package ImageMagick. Vous pouvez télécharger le fichier Zip ImageMagick (qui ne fait que 13 Mo BTW), extraire uniquement l' convertoutil et ses dépendances et le distribuer à vos machines virtuelles. Il existe un outil appelé Dependency Walker que vous pouvez utiliser pour déterminer les dépendances de l' convertoutil.

Drew Chapin
la source
1

Utilisez l' -sizeindicateur dans le programme netpbm pnmtopng . Les unités utilisées sont des pixels par mètre. L'exemple suivant définira newfile.png sur 300 dpi.

pngtopnm <oldfile.png | pnmtopng -size='11811 11811 1' >newfile.png
Diomidis Spinellis
la source
0

Eh bien, vous pourriez potentiellement utiliser un 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")

Source .

Goncalo
la source
Le programme d'installation de Python 3.3.2 (sans le code source) fait 19,3 Mo et le programme d'installation de Python 2.7.5 fait 15,5 Mo.
Drew Chapin
5
Cela redimensionnera l'image, pas changera le DPI.
Bobby
0

La bonne ligne de commande "Convert" pour Image Magick serait d'utiliser l'argument -resample:

convert image.png -resample 150x150 -units pixelsperinch ../ImagesAdjusted/image.png
tolistim
la source