java 格式调整_在Java中流式传输图像格式转换和调整大小

所以,假设我想在Java中将一些PNG重新编码为JPEG.图像具有极高的分辨率,例如10 000 x 10 000px.使用“标准”Java映像API编写器和读取器,您需要在某些时候将整个映像解码到RAM中,这会占用极大的RAM空间(数百MB).我一直在寻找其他工具如何做到这一点,我发现ImageMagick使用磁盘像素存储,但这似乎对我的需求来说太慢了.所以我需要的是Tru streaming streamder.通过真正的流式传输,我的意思是通过chuncks或bin来读取和处理数据,而不仅仅是将流作为输入,而是事先对其进行解码.

现在,首先是背后的理论 – 在JPEG和PNG算法下,甚至可以使用流来实现这一点,或者说在数据箱中呢?所以不需要在内存(或其他存储)中编码整个图像?在JPEG压缩中,前几个阶段可以在流中完成,但我相信Huffman编码需要在量化后构建整个值概率树,因此需要分析整个图像 – 因此整个图像需要事先解码,或者以某种方式按需解码按地区划分.

如果能够实现以上这个黄金问题,是否有任何Java库可以以这种方式实际工作?并节省大量的RAM?

解决方法:

如果我创建一个10,000 x 10,000 PNG文件,充满不可压缩的噪音,使用ImageMagick如下:

convert -size 10000x10000 xc:gray +noise random image.png

我看到ImageMagick使用675M的RAM来创建最终的572MB文件.

我可以将它转换为带有这样的vips的JPEG:

vips im_copy image.png output.jpg

和vips在转换时使用不超过100MB的RAM,并且在4年左右的合理规格iMac上花费7秒 – 尽管使用SSD.

标签:java,type-conversion,png,jpeg,encoder

来源: https://codeday.me/bug/20190708/1401163.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值