Apache Groovy/GrailsとOpenCVでサイズそのままにJPEGの容量を減らす方法
OpenCVを使って何かする、となるともうCとPythonのサンプルばかりですね。。。 ということで、今回Grailsでjpegの品質を落として容量を減らしてクライアントに返す、という方法を調べましたのでメモします。 JavaやApache GroovyでOpenCVを利用するための環境構築はこちらをどうぞ。 ---> Java、Apache Groovy、GrailsでOpenCVを利用する方法
import org.opencv.core.Mat
import org.opencv.core.MatOfByte
import org.opencv.core.MatOfInt
import org.opencv.imgcodecs.Imgcodecs
clas HogeController {
def index() {
// 読み込み
Mat jpg = Imgcodecs.imread("JEPGファイルのフルパス")
// 結果を格納するMat
MatOfByte encoded = new MatOfByte()
// JPEG品質を表すMatOfIntを作成
// 以下は品質を20と指定している。オリジナルは100。
MatOfInt quality = new MatOfInt(Imgcodecs.IMWRITE_JPEG_QUALITY, 20)
// エンコード(これで実際に品質が落ちたjpegの値がMatOfByteインスタンスに格納される)
Imgcodecs.imencode(".jpg", jpg, encoded, quality)
// 以下はGrailsから圧縮した画像をそのまま返す場合。
// MatOfArray#toArray()はbyte[]を返すので、それを使えばもう後はだたのJava(Groovy)の話。
render file: encoded.toArray(), contentType: "image/jpeg"
}
}
公開日:2019/03/08