首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:通过低位深度的套接字发送BufferedImage

Java:通过低位深度的套接字发送BufferedImage
EN

Stack Overflow用户
提问于 2010-03-09 02:38:48
回答 2查看 1.2K关注 0票数 1

我认为标题已经足够说明问题了。我有一个完整的质量BufferedImage,我想通过一个低位深度的OutputStream发送它。我不希望一个算法逐个像素地改变质量,所以它仍然是一个完整的质量。

因此,目标是通过OuputStream写入图像(具有全分辨率、全尺寸),只需很少的字节数即可写入。

谢谢,

马提金

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-10 04:32:17

您需要将图像数据编码为具有适合您图像的正确特征的格式。如果它是24位颜色,并且有很多颜色,而您又不想损失任何质量,那么您可能会坚持使用PNG,但是可以看看无损JPEG2000。

如果你可能会失去一些质量,那么尝试

  1. 有损JPEG2000 --在相同质量损失下比JPEG2000小得多
  2. 减少颜色数量并使用色彩映射格式

如果图像只有灰度或黑白数据,请确保对其进行编码(8位灰度或1位黑白)。然后,确保您使用的编码器已针对这种格式进行了调优(例如,具有Group4或JBIG2的TIFF )。

另一个好的选择是从图像中删除所有不需要的元数据(或者确保编码器不会放入任何元数据)。

如果您想继续使用Java语言,您可能必须使用TIFF或JPEG --有第三方图像编码器(例如,我的公司Atalasoft制作了这些高级编码器的.NET版本--也有Java供应商)

仅供参考:减少位深度通常意味着降低质量(除非减少没有意义)。例如,如果我有一个24位的彩色图像,但所有的颜色都是灰色的(其中R==G==B),那么减少到8位的灰度不会降低质量。如果您的图像具有256种不同颜色的任何集合,并且您切换到颜色映射(索引或调色板)格式,也是如此。您可以减少字节数,但不会降低质量。

票数 1
EN

Stack Overflow用户

发布于 2010-03-09 02:49:12

看看java.util.zip包中关于压缩的所有内容:

http://java.sun.com/developer/technicalArticles/Programming/compression/

尽管JPEG和PNG已经以某种方式进行了压缩,但使用Inflater类,您可以减少字节数,同时保持图像的质量完全相同。压缩已经压缩的格式通常并不重要。但是,如果您将几个图像组合在一起,则对它们进行膨胀是很重要的(因为膨胀技术可以识别对象数据中的常见模式,从而减少重复,从而减少字节数)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2403769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档