add image format checking to the animated gif handler

This commit is contained in:
Gered 2014-04-06 11:05:26 -04:00
parent 4247a1e9d8
commit cddf7d9e86
2 changed files with 18 additions and 4 deletions

View file

@ -1,7 +1,9 @@
(ns toascii.models.image
(:import (java.awt.image BufferedImage)
(javax.imageio.stream ImageInputStream)
(java.io Writer))
(javax.imageio ImageIO ImageReader)
(java.io Writer)
(java.util Iterator))
(:require [clojure.java.io :as io]
[clj-image2ascii.core :as i2a]
[toascii.util :refer [query-param-url->java-url stream-response]]))
@ -38,4 +40,14 @@
(.write w "</div>")
(.write w "<script type=\"text/javascript\">")
(.write w js-gif-animation)
(.write w "</script>"))))
(.write w "</script>"))))
(defn gif? [^ImageInputStream image-stream]
(let [^Iterator readers (ImageIO/getImageReaders image-stream)]
(->> (loop [formats []]
(if (.hasNext readers)
(recur (conj formats (.next readers)))
formats))
(map (fn [^ImageReader r]
(.getFormatName r)))
(some #(= "gif" %)))))

View file

@ -5,7 +5,7 @@
[liberator.core :refer [defresource]]
[compojure.core :refer [ANY]]
[toascii.route-utils :refer [register-routes]]
[toascii.models.image :refer [image->ascii gif->ascii get-image get-image-stream]]
[toascii.models.image :refer [image->ascii gif->ascii get-image get-image-stream gif?]]
[toascii.util :refer [parse-int parse-boolean]]))
(defresource render-image [{:keys [url width color format] :as params}]
@ -54,7 +54,9 @@
:exists?
(fn [_]
(if-let [stream (get-image-stream url)]
{:image stream}
(if-not (gif? stream)
(throw (new Exception "Invalid GIF image."))
{:image stream})
[false {:error "Image could not be loaded."}]))
:handle-ok
(fn [ctx]