我认为标题已经足够说明问题了。我有一个完整的质量BufferedImage,我想通过一个低位深度的OutputStream发送它。我不希望一个算法逐个像素地改变质量,所以它仍然是一个完整的质量。
因此,目标是通过OuputStream写入图像(具有全分辨率、全尺寸),只需很少的字节数即可写入。
谢谢,
马提金
发布于 2010-03-10 04:32:17
您需要将图像数据编码为具有适合您图像的正确特征的格式。如果它是24位颜色,并且有很多颜色,而您又不想损失任何质量,那么您可能会坚持使用PNG,但是可以看看无损JPEG2000。
如果你可能会失去一些质量,那么尝试
如果图像只有灰度或黑白数据,请确保对其进行编码(8位灰度或1位黑白)。然后,确保您使用的编码器已针对这种格式进行了调优(例如,具有Group4或JBIG2的TIFF )。
另一个好的选择是从图像中删除所有不需要的元数据(或者确保编码器不会放入任何元数据)。
如果您想继续使用Java语言,您可能必须使用TIFF或JPEG --有第三方图像编码器(例如,我的公司Atalasoft制作了这些高级编码器的.NET版本--也有Java供应商)
仅供参考:减少位深度通常意味着降低质量(除非减少没有意义)。例如,如果我有一个24位的彩色图像,但所有的颜色都是灰色的(其中R==G==B),那么减少到8位的灰度不会降低质量。如果您的图像具有256种不同颜色的任何集合,并且您切换到颜色映射(索引或调色板)格式,也是如此。您可以减少字节数,但不会降低质量。
发布于 2010-03-09 02:49:12
看看java.util.zip包中关于压缩的所有内容:
http://java.sun.com/developer/technicalArticles/Programming/compression/
尽管JPEG和PNG已经以某种方式进行了压缩,但使用Inflater类,您可以减少字节数,同时保持图像的质量完全相同。压缩已经压缩的格式通常并不重要。但是,如果您将几个图像组合在一起,则对它们进行膨胀是很重要的(因为膨胀技术可以识别对象数据中的常见模式,从而减少重复,从而减少字节数)。
https://stackoverflow.com/questions/2403769
复制相似问题