最近邻缩放有效:当我使用TYPE_NEAREST_NEIGHBOR
.
尽管它是 Scala 代码,但所有使用的库都是标准 Java 库。
职能:
def getBufferedImage(imageFile: java.io.File): BufferedImage = {
ImageIO.read(imageFile)
}
def scaleImage(image: BufferedImage, minSize: Double): BufferedImage = {
val before: BufferedImage = image
val w = before.getWidth()
val h = before.getHeight()
val affit = new AffineTransform()
var scale = 1.0
if(h < w) {
if(h > 0) {
scale = minSize / h
}
} else {
if(w > 0) {
scale = minSize / w
}
}
affit.scale(scale, scale)
val affitop = new AffineTransformOp(affit, AffineTransformOp.TYPE_BICUBIC)
affitop.filter(before, null)
}
def getImageJpegByteArray(image: BufferedImage): Array[Byte] = {
val baos = new java.io.ByteArrayOutputStream()
val mcios = new MemoryCacheImageOutputStream(baos)
ImageIO.write(image, "jpeg", mcios)
mcios.close()
baos.toByteArray
}
调用代码片段:
val img = getBufferedImage(imageFile)
val scaledImg = scaleImage(img, 512)
val result = getImageJpegByteArray(scaledImg)
// result is written to SQLite database
result
被写入 SQLite 数据库。如果我从数据库中下载它并将其保存为 JPEG 文件,则生成的 JPEG 是
- 正如预期的那样,如果我使用
AffineTransformOp.TYPE_NEAREST_NEIGHBOR
- 如果我使用完全黑
AffineTransformOp.TYPE_BILINEAR
- 如果我使用完全黑
AffineTransformOp.TYPE_BICUBIC
因此,我指责AffineTransformOp
是错误的......
我该如何解决这个问题?
文件的幻数result
总是ff d8 ff
与 JPEG 的预期一致。
细节
Java 版本:Java HotSpot(TM) 64 位服务器 VM,Java 1.7.0_71
操作系统:苹果、OS X 10.9.5
测试图片:http ://www.photos-public-domain.com/wp-content/uploads/2012/05/thundercloud-plum-blossoms.jpg