Wie ändere ich die DPI einer PNG-Datei? (in der Kommandozeile ohne ImageMagick)

9

Ich suche nach einer Möglichkeit, die DPI in PNG-Bilddateien zu ändern. Mit ImageMagick ist dies ganz einfach:

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

Das Problem ist, dass ich diesen Befehl von meiner Anwendung aus ausführen werde, die auf mehreren VMs ausgeführt wird, auf denen ImageMagick nicht installiert ist. Ich kann die Upgrade-Pakete auf diese VMs übertragen, aber im Fall von ImageMagick würde dies einem Upgrade-Bundle etwa 30 MB hinzufügen, was für meinen Anwendungsfall etwas zu viel ist.

Lange Rede, kurzer Sinn : Gibt es eine Möglichkeit, die DPI in einer PNG-Datei mit einem kleinen Befehlszeilentool (wie in der Paketgröße) zu ändern?

Optional wäre es auch in Ordnung, Bytes in einer Rohbilddatei zu ändern, wenn jemand weiß, wo er nach ihnen suchen muss ...

Johndodo
quelle
Sie könnten erwägen, Ihre eigene Implementierung durchzuführen. Das Manipulieren der PNG-Chunks ist unkompliziert genug. Wenn Sie nur eine bestimmte DPI auf alle anwenden möchten, benötigen Sie nicht einmal eine funktionierende Prüfsummenfunktion. Kopieren Sie einfach einen vorgefertigten pHYsBlock aus einem in Photoshop erstellten PNG.
Zdenek

Antworten:

6

Ist 2,10 MB klein genug? Wenn ja, verwenden Sie NConvert und einen Batch-Befehl wie:

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

Wofür ist NConvert?

XnView ist eine GUI-basierte Anwendung, mit der Sie Bilder über eine grafische Benutzeroberfläche ändern und bearbeiten können. NConvert verfügt über ungefähr die gleichen Funktionen wie XnView, ist jedoch ein Befehlszeilenprogramm und verfügt über keine grafische Benutzeroberfläche. Sie können NConvert in Batch-Skripten verwenden oder eine andere Anwendung kann es aufrufen.

Hilfreiche Links

  • Anfängerleitfaden und Wiki mit einigen Beispielen zum Starten
  • Hilfedatei, um zu sehen, welche Befehlszeilenparameter verfügbar sind (Hochgeladen auf Pastebin)
  • Ein grafisches Frontend mit Nconvert ist XnConvert . Verwenden Sie diese Option, um Nconvert-Batchdateien zu erstellen und zu exportieren
  • Forum für Xnconvert und Nconvert für
Nixda
quelle
Danke, sieht gut aus und wird wahrscheinlich in Zukunft nützlich sein! In diesem Fall habe ich das PNG-Format studiert (was zum Glück einfach genug war) und die Bilder über eine kleine benutzerdefinierte App (15 Zeilen in PHP) geändert.
Johndodo
@ Johndodo Das klingt interessant. Möchten Sie Ihre Bewerbung mit uns teilen?
Nixda
Leider steht es mir nicht frei, dies zu tun, aber Sie können das Gleiche tun, indem Sie eine (großartige!) Spezifikation des PNG-Dateiformats lesen und eine App erstellen , die den pHY-Block ändert . Es ist wirklich einfach, wenn Sie wissen, was Sie tun.
Johndodo
1

Sie haben erwähnt, dass Sie diesen Befehl "von Ihrer Anwendung aus" ausführen würden, und dies lässt mich glauben, dass Sie diese Anwendung geschrieben haben oder sie warten. Es gibt jedoch ImageMagick-APIs für mehrere Sprachen, und Sie können eine davon verwenden, um die Funktionalität direkt in Ihr vorhandenes Programm aufzunehmen. Die Erhöhung der Paketgröße hängt davon ab, in welcher Sprache Ihre Anwendung geschrieben ist und ob Sie die Bibliothek statisch oder dynamisch verknüpfen. Ich würde mir jedoch vorstellen, dass sie erheblich kleiner als 30 MB ist.

Eine andere Option besteht darin, nicht das gesamte ImageMagick-Paket einzuschließen. Sie können die ImageMagick Zip-Datei (nur 13 MB BTW) herunterladen , nur das convertTool und seine Abhängigkeiten extrahieren und diese auf Ihre VMs verteilen. Es gibt ein Tool namens Dependency Walker , mit dem Sie die Abhängigkeiten des convertTools bestimmen können .

Drew Chapin
quelle
1

Verwenden Sie die -sizeFahne im netpbm pnmtopng Programm. Die verwendeten Einheiten sind Pixel pro Meter. Im folgenden Beispiel wird newfile.png auf 300 dpi gesetzt.

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

Nun, Sie könnten möglicherweise ein Python-Skript verwenden.

#!/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")

Quelle .

Goncalo
quelle
Das Python 3.3.2-Installationsprogramm (ohne Quellcode) ist 19,3 MB groß und das Python 2.7.5-Installationsprogramm ist 15,5 MB groß.
Drew Chapin
5
Dadurch wird die Bildgröße geändert und nicht die DPI geändert.
Bobby
0

Die richtige "Konvertierungs" -Befehlszeile für Image Magick wäre die Verwendung des Arguments -resample:

convert image.png -resample 150x150 -units pixelsperinch ../ImagesAdjusted/image.png
Tolistim
quelle