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
|
||||
(: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" %)))))
|
||||
|
|
|
@ -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]
|
||||
|
|
Reference in a new issue