Ended in der Lage, dies zu lösen, indem Sie den Kommentar zu Ihrer Frage zusammen mit meiner früheren Antwort von here kombinieren. Kleinere Änderungen am Code lassen ihn mit Bildern arbeiten, die keine Bilder sind.
Ich habe es nicht geändert, um in Unterverzeichnisse zu recurse. Wäre einfach genug zu tun.
(defn files-in-dir [dir]
(filter #(not (.isDirectory %))
(.listFiles (java.io.File. dir))))
(defn figure-out-height-width
[files]
(remove nil?
(map (fn [file]
(with-open [r (java.io.FileInputStream. file)]
(if-let [img (javax.imageio.ImageIO/read r)]
[file (.getWidth img) (.getHeight img)])))
files)))
user> (pprint (files-in-dir "/home/jmccrary/Downloads/"))
(#<File /home/jmccrary/Downloads/Girl_Talk_-_All_Day_(IA123)_mp3s.zip>
#<File /home/jmccrary/Downloads/CSS3-for-Web-Designers.zip>
#<File /home/jmccrary/Downloads/manual.pdf>
#<File /home/jmccrary/Downloads/test.jpeg>
#<File /home/jmccrary/Downloads/nautilus-dropbox_0.6.7_amd64.deb>
#<File /home/jmccrary/Downloads/rubygems-1.3.7.tgz>
#<File /home/jmccrary/Downloads/HTML5-FOR-WEB-DESIGNERS.zip>
#<File /home/jmccrary/Downloads/bcompare-3.1.11.12238.tar.gz>
#<File /home/jmccrary/Downloads/shared_ptr_example.cpp>)
nil
user> (figure-out-height-width (files-in-dir "/home/jmccrary/Downloads"))
([#<File /home/jmccrary/Downloads/test.jpeg> 32 32])
Nach einem wenig darüber nachzudenken fühlt es schmutzig die Prüfung für eine Datei mit dem Herausziehen die Breite und Höhe, um ein Bild zu kombinieren. Alternativ könnten Sie eine Funktion definieren, die diese Filterung separat durchführt und Ihnen eine Folge von Bildern gibt.
(defn filter-images
[files]
(reduce (fn [res file]
(if-let [img (javax.imageio.ImageIO/read file)]
(conj res img)
res))
[]
files))
user> (filter-images (files-in-dir "/home/jmccrary/Downloads"))
[#<BufferedImage [email protected]: type = 5 ColorModel: #pixelBits = 24 numComponents = 3 color space = java.awt.color.ICC_Color\
[email protected] transparency = 1 has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 32 height = 32 #numDataElements 3 \
dataOff[0] = 2>
]
Hier ist ein nützlicher Link: http://webcache.googleusercontent.com/search?q=cache:2Gkd-GcGI5AJ:forums.sun.com/thread.jspa%3FthreadID%3D5398376 + java + bestimmen + wenn + a + file + ist + ein + bild & cd = 1 & hl = sv & ct = clnk & gl = se & client = firefox-a –