Forráskód Böngészése

Don't parse images, use imagemagik's 'identify'

Innocenty Enikeew 10 éve
szülő
commit
d80bafeed6
2 módosított fájl, 10 hozzáadás és 14 törlés
  1. 9 11
      exif.lisp
  2. 1 3
      photo-store.asd

+ 9 - 11
exif.lisp

@@ -25,20 +25,18 @@
 
 (defun exif-to-dim (exif)
   (when exif
-    (let ((width (and exif (or (zpb-exif:exif-value :PixelXDimension exif)
-                               (zpb-exif:exif-value :ImageWidth exif))))
-          (height (and exif (or (zpb-exif:exif-value :PixelYDimension exif)
-                                (zpb-exif:exif-value :ImageHeight exif)))))
+    (let ((width (or (zpb-exif:exif-value :PixelXDimension exif)
+                     (zpb-exif:exif-value :ImageWidth exif)))
+          (height (or (zpb-exif:exif-value :PixelYDimension exif)
+                      (zpb-exif:exif-value :ImageHeight exif))))
       (and width height (list width height)))))
 
 (defun get-dims (path)
-  (with-open-file (in path :element-type '(unsigned-byte 8))
-    (case (intern (string-upcase (pathname-type path)) "KEYWORD")
-      (:jpg (multiple-value-bind (h w)
-                (jpeg:decode-stream-height-width in)
-              (list w h)))
-      (:png (let ((png (png-read:read-png-datastream in)))
-              (list (png-read:width png) (png-read:height png)))))))
+  (ignore-errors
+    (read-from-string
+     (uiop:run-program
+      (list "identify" "-format" "(%w %h)" (namestring path))
+      :output :string))))
 
 (defun load-photo-info (path)
   (with-open-file (in path :element-type '(unsigned-byte 8))

+ 1 - 3
photo-store.asd

@@ -3,13 +3,11 @@
   :description "Home photo storage"
   :author "Innokentiy Enikeev <me@enikesha.net>"
   :license "MIT"
-  :depends-on (:cl-jpeg
-               :cl-json
+  :depends-on (:cl-json
                :geo
                :iterate
                :local-time
                :log4cl
-               :png-read
                :restas
                :sqlite
                :zpb-exif)