私は clojure の初心者です (Java について何も知りません)。
私の目標は、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から画像を取得し、ディスクに書き込み、バッファからバッファに書き込みます。次に、ディスクから読み取り、メモリ内のイメージのサイズを変更して、新しいファイルに再度書き込みます。最後に、最初のコピーを削除できます。
一時的なディスク書き込みなしで、操作全体を 1 回のパスで実行したいと考えています。画像全体をメモリに保持することは特に気にしません...私の目的では、それらは一般的に小さめの画像になります。
java.awt.image.BufferedImage
io ストリームからオブジェクトにデータを渡す方法がわかりません。