Gibt es einen Shell-Befehl, der die Pixelgröße eines Bildes zurückgibt?
Ich versuche mit convert
(zB convert -delay 50 1.gif 2.gif -loop 0 animated.gif
) ein animiertes Gif aus verschiedenen Gifs mit verschiedenen Größen zu erstellen .
Das Problem ist, dass beim Konvertieren einfach die Bilder mit der Größe des ersten Bilds als Größe des animierten Gifs überlappt werden. Da sie unterschiedliche Größen haben, ist das Ergebnis ein bisschen chaotisch, und die alten Frames werden unter den neuen Frames angezeigt.
Antworten:
habe eine lösung gefunden
identify
:, teil des imagemagick pakets, macht genau das was ich brauchequelle
identify imagename.ico
?Like todour.ico[0] ICO 32x32 32x32+0+0 4-bit sRGB 0.000u 0:00.000
todour.ico[1] ICO 16x16 16x16+0+0 4-bit sRGB 0.000u 0:00.000
todour.ico[2] ICO 48x48 48x48+0+0 8-bit sRGB 0.000u 0:00.000
Anstatt die Ausgabe
identify
nach Augenmaß oder nach Textdienstprogrammen zu analysieren , können Sie die-format
Option verwenden, um die Breite und Höhe in dem für Sie am besten geeigneten Format auszugeben. Zum Beispiel:Eine Liste der Bildeigenschaften, die Sie ausgeben können, finden Sie auf dieser Seite . Für die Frage hier scheinen Sie jedoch nur
%w
und zu benötigen%h
, die die Breite und Höhe des Bildes in Pixel angeben.Die von gebotene Flexibilität erwies sich
-format
für mich als nützlich, um die größten Bilder in Bezug auf Pixel zu finden, indem%[fx:w*h]
für eine Reihe von Bildern ausgegeben und die Ausgabe sortiert wurde.Möglicherweise möchten Sie die
-ping
Option angeben, wenn Sie viele Bilder verarbeiten, kompliziertere Escape-Zeichen verwenden und sicherstellen möchten, dass das Programm keine Zeit mit dem Laden der gesamten Bilder verschwendet. Bei einfachen Escape-Anweisungen-ping
sollte dies die Standardeinstellung sein. Weitere Informationen zur Auswahl zwischen-ping
und+ping
finden Sie hier .quelle
Sie können einfach den Befehl "file" verwenden, um die benötigten Informationen zu erhalten:
quelle
file taylor-swift-money-makers-990.jpg
->taylor-swift-money-makers-990.jpg: JPEG image data, JFIF standard 1.01, comment: "CREATOR: gd-jpeg v1.0 (using IJ"
Verwenden Sie
identify
, um die Größen zu sehen:Wert extrahieren über
cut | sed
, aus Feld 3:Zu Variable zuordnen:
quelle
Beide
display
undfile
sind ziemlich langsam, und haben das Potenzial , zu bringen , auch durchaus in der Lage Systeme in die Knie mit vielen mehrere Dateien handelt. Ein kleiner Test:Durch Lesen nur der erforderlichen Bytes kann dieser Vorgang erheblich beschleunigt werden.
Hier ist pngsize:
Diese Methode ist viel schneller als die Verwendung einer Bibliothek, die das PNG vorwärts, rückwärts und seitwärts lädt, um die Bildgröße zu erhalten: P (Lesen Sie den Code sorgfältig durch, bevor Sie ihn in ein Verzeichnis mit beliebigen PNGs einfügen.)
Der Code verwendet inet.h für htonl () zu de- Endian -ize Header Byte - Reihenfolge.
quelle
Sie können auch GraphicsMagick ausprobieren , eine gut gepflegte Version von ImageMagick, die beispielsweise bei Flickr und Etsy verwendet wird:
Es ist schneller als ImageMagick zu identifizieren (in meinen Tests etwa zweimal).
quelle
Dies war ein hilfreiches Snippet (ich habe es nicht geschrieben), das Dimensionen für jedes PNG und JPG im Ordner zurückgibt:
quelle
Für diejenigen wie mich, die die Größe in Megapixeln wollen:
quelle