add image format checking to the animated gif handler
This commit is contained in:
parent
4247a1e9d8
commit
cddf7d9e86
|
@ -1,7 +1,9 @@
|
||||||
(ns toascii.models.image
|
(ns toascii.models.image
|
||||||
(:import (java.awt.image BufferedImage)
|
(:import (java.awt.image BufferedImage)
|
||||||
(javax.imageio.stream ImageInputStream)
|
(javax.imageio.stream ImageInputStream)
|
||||||
(java.io Writer))
|
(javax.imageio ImageIO ImageReader)
|
||||||
|
(java.io Writer)
|
||||||
|
(java.util Iterator))
|
||||||
(:require [clojure.java.io :as io]
|
(:require [clojure.java.io :as io]
|
||||||
[clj-image2ascii.core :as i2a]
|
[clj-image2ascii.core :as i2a]
|
||||||
[toascii.util :refer [query-param-url->java-url stream-response]]))
|
[toascii.util :refer [query-param-url->java-url stream-response]]))
|
||||||
|
@ -38,4 +40,14 @@
|
||||||
(.write w "</div>")
|
(.write w "</div>")
|
||||||
(.write w "<script type=\"text/javascript\">")
|
(.write w "<script type=\"text/javascript\">")
|
||||||
(.write w js-gif-animation)
|
(.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" %)))))
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
[liberator.core :refer [defresource]]
|
[liberator.core :refer [defresource]]
|
||||||
[compojure.core :refer [ANY]]
|
[compojure.core :refer [ANY]]
|
||||||
[toascii.route-utils :refer [register-routes]]
|
[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]]))
|
[toascii.util :refer [parse-int parse-boolean]]))
|
||||||
|
|
||||||
(defresource render-image [{:keys [url width color format] :as params}]
|
(defresource render-image [{:keys [url width color format] :as params}]
|
||||||
|
@ -54,7 +54,9 @@
|
||||||
:exists?
|
:exists?
|
||||||
(fn [_]
|
(fn [_]
|
||||||
(if-let [stream (get-image-stream url)]
|
(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."}]))
|
[false {:error "Image could not be loaded."}]))
|
||||||
:handle-ok
|
:handle-ok
|
||||||
(fn [ctx]
|
(fn [ctx]
|
||||||
|
|
Reference in a new issue