【发布时间】:2020-03-11 03:28:22
【问题描述】:
我正在尝试缩放 JPEG 图像并使用以下代码将其保存回来,但是,生成的 storage/test/thumbnail.jpg 文件只是一个空文件。我用PNG 格式检查了相同的代码,它运行良好。但是,对于我的用例,我需要 JPG 图像而不是 PNG。
import java.awt.geom.AffineTransform
import java.awt.image.AffineTransformOp
import java.awt.image.BufferedImage
import java.io.File
import javax.imageio.ImageIO
fun main() {
val file = File("storage/test/original.jpg")
val image = ImageIO.read(file.inputStream())
val thumbnail = thumbnailOf(image)
val thumbnailFile = File("storage/test/thumbnail.jpg")
thumbnailFile.parentFile.mkdirs()
thumbnailFile.outputStream().use { output ->
ImageIO.write(thumbnail, "JPEG", output)
}
}
fun thumbnailOf(image: BufferedImage): BufferedImage {
val width = image.width
val height = image.height
val ratio = width / height.toDouble()
if (ratio == 0.0) {
error("Cannot determine ratio for ($width*$height)")
}
val newWidth = 600
val newHeight = (newWidth / ratio).toInt()
val scaledImage = BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB)
val at = AffineTransform()
at.scale(newWidth / width.toDouble(), newHeight / height.toDouble())
val ato = AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC)
return ato.filter(image, scaledImage)
}
到目前为止,我能找到的最好的东西是这个答案 https://stackoverflow.com/a/16026254/4112200 ,它指出 OpenJDK 没有 JPEG 编码器。那么,如果是这种情况,如何将 JPEG 编码器(或解码器)添加到我当前安装的 OpenJDK 中?
我目前安装的 OpenJDK
openjdk version "12" 2019-03-19
OpenJDK Runtime Environment (build 12+33)
OpenJDK 64-Bit Server VM (build 12+33, mixed mode, sharing)
【问题讨论】:
标签: java jpeg javax.imageio openjdk-12