2017-06-02 3 views
1

Wie bekomme ich den Typ einer Datei und wenn es ein Bild ist, erhalten Sie ihre Abmessungen?

Ich möchte Dateien von der Festplatte lesen, feststellen, ob diese Dateien tatsächlich Bilder sind, und ihre Abmessungen abrufen, um festzustellen, ob sie die Kriterien meines Programms erfüllen.Get Image Typ und Metadaten in Racket

ich bemerkte die racket/draw Pakete hat eine bitmap% Art, die kann Bilder laden, aber dies scheint über den Rahmen meiner Aufgabe, wie ich glaube, die Dateien in einem ziehbaren Datentyp geladen wird mein Speicher-Nutzung Ziele überschreiten und führen zu verwechselter Code. Wenn ich dies verwende, muss ich außerdem die bitmap% Fehler verwenden, um Dateien, die keine Bilder sind, auszublenden.

Ich sah auch ein Paket zur Manipulation von PNG-Bildern, aber ich möchte auch Informationen über JPEG, GIF und möglicherweise TIFF erhalten.

Also meine Frage ist zweifach - gibt es sowas wie libmagic für Racket, und gibt es sowas wie imagemagick für Racket?

Antwort

1

den Dateityp zu bestimmen, können Sie

  • Blick auf die Dateierweiterung

oder

  • las die ersten Bytes der Datei mit der magischen Zahl und vergleichen für einige wählte die Bildformate

Informationen über magische Zahlen: https://en.wikipedia.org/wiki/Magic_number_%28programming%29

Eine Alternative ist die Verwendung eines externen Dienstprogramms file. Das Dienstprogramm ist auf vielen Systemen verfügbar. Diese Manpage ist für die Linux-Version: https://linux.die.net/man/1/file

Bezüglich Informationen aus einer JPEG-Datei zu erhalten, finden Sie in diesem Paket:

https://pkgs.racket-lang.org/package/binary-class-exif

+0

ich völlig verfehlt, dass exif Paket. Also könnte ich das in Verbindung mit dem Paket zum Lesen von PNG-Daten verwenden. Ich brauche immer noch einen Weg, gif Metadaten zu bekommen ... vielleicht sollte ich dafür ein Paket schreiben. – Winny