【发布时间】:2015-07-23 19:31:09
【问题描述】:
最近邻缩放有效:当我使用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
}
调用代码sn-p:
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 位服务器虚拟机,Java 1.7.0_71
操作系统:Apple、OS X 10.9.5
测试图片:http://www.photos-public-domain.com/wp-content/uploads/2012/05/thundercloud-plum-blossoms.jpg
【问题讨论】:
-
我尝试了所有三种组合以及
AffineTransformOp的所有三种组合,它们都输出了一些东西(纯 Java) -
所有图片都会出现这种情况,还是只出现一些?无论如何,您可以链接示例图像以进行测试吗?
-
试试这个或任何其他 JPEG:photos-public-domain.com/wp-content/uploads/2012/05/… 双线性会导致完全黑色的输出。双三次会产生完全黑色的输出。
-
使用 Oracle Java 8u25 对其进行了测试,并且可以正常工作。您使用哪个 Java 版本?也许这个错误,如果它是一个,已经被修复了?!
标签: java jpeg javax.imageio affinetransform bicubic