我是clojure新手(我不知道任何Java可以说)。在没有临时磁盘文件的情况下调整clojure中的图像
我的目标是从URL中获取图像并制作缩略图。我到目前为止:
(ns myapp.image
(:require [clojure.java.io :as io])
(:import [javax.imageio.ImageIO]
[java.awt.image.BufferedImage]))
(defn get-remote-image
[url file]
(with-open [in (io/input-stream url) out (io/output-stream file)]
(io/copy in out)))
(defn resize
"Resize a file. Pass in a width and height."
[file-in file-out width height]
(let [img (javax.imageio.ImageIO/read (io/file file-in))
imgtype (java.awt.image.BufferedImage/TYPE_INT_ARGB)
simg (java.awt.image.BufferedImage. width height imgtype)
g (.createGraphics simg)]
(.drawImage g img 0 0 width height nil)
(.dispose g)
(javax.imageio.ImageIO/write simg "png" (io/file file-out))))
现在它从URL抓取图像并将其写入磁盘,缓冲区缓冲区。然后它从磁盘读取数据并将其大小调整到内存中,再次将其写入新文件。最后,我可以删除第一个副本。
我想一次性完成整个操作,没有临时磁盘写入。我并不特别在意记忆中的整个形象......对于我的目的而言,它们一般都是小图像。
我不明白如何将数据从io流传递到java.awt.image.BufferedImage
对象。