java-如何调整流中图像的大小(使用最少的RAM)?
作者:互联网
寻找类似djpeg的东西,它使用O(1)RAM通过子采样来调整大小,但是使用Java并能够处理jpg,png,gif,bmp等.也许某些实现已经存在.
如何调整流中图像的大小(使用最少的RAM)?
解决方法:
FileImageInputStream对特定的图像格式一无所知,这只是从文件支持的输入中读取int,short,byte,byte数组等的便利.文件格式支持由各种ImageReader实现处理.
这个问题的简短答案是:如果不加载图像,就无法真正调整图像的大小.
根据djpeg的描述:
djpeg decompresses the named JPEG file […]
(强调是我的)
但是,您可以对图像进行子采样,这对于大多数格式而言确实非常快(并且将使用更少的内存).看一下ImageReadParam.setSourceSubSampling方法和ImageReader.read(int,ImageReadParam)方法.这将创建一个调整大小的图像,与“最近邻居”或“点采样”算法非常相似(即结果不一定看起来不错).
可以先组合子采样,然后再调整质量,以节省内存,并可能获得可接受的结果.这完全取决于您期望/需要的质量.
如果您真的要调整图像大小而不将它们加载到堆内存中(也许您的图像很大),我已经编写了一些可以使用memory mapped files的类,但是它们的速度很慢.
标签:image,image-resizing,java 来源: https://codeday.me/bug/20191030/1970127.html