【问题标题】:Screenshot compression loss of quality截图压缩质量损失
【发布时间】:2013-05-23 09:30:07
【问题描述】:

也许其他人也遇到过这个问题: 正如标题所说,当从设备上传屏幕截图到我们的服务器时,图像质量下降非常高。您可以在以下链接中看到一个示例 http://cdn.voicebo.com/7507-05e6a7b3bf91d96b2d08da649c2ef590.jpg

此屏幕截图是在 Nexus 4 上拍摄的,但同样的情况也发生在 Galaxy S2、S3 和 Note 2 上。不幸的是,我们目前没有更多的手机可以对此进行测试,但考虑到以下型号的受欢迎程度,这会影响我们的大量用户.

我已经搜索了很长一段时间来寻找可能发生这种情况的答案或原因,并发现以下链接不是我真正想要的,但包含一些信息 http://www.google.rs/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCYQFjAA&url=http%3A%2F%2Fandroidforums.com%2Fsamsung-galaxy-s3%2F580114-screenshot-glitch.html&ei=1dKdUbPNA8nBO7G9gPgE&usg=AFQjCNECq7UNMp16pU8WLMlLwZVb4i2Ofw

我还得出结论,屏幕截图图像保存为 png 文件,而来自相机的图像保存为 jpeg(我认为这对于所有 ROMS 都是相同的,但可能是错误的)所以这也可能是问题所在。我不明白为什么这是一个问题,因为据我了解,当您从任何支持的格式读取图像文件时,您会获得该图像的原始数据字节,因此如果原始字节,输入格式不应在输出压缩中起作用阅读没有错误。
图像压缩中的相关代码部分仅此而已,但如果需要更多信息,我可以添加更多:

bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);

我要问的问题是: 有没有其他人遇到过这个问题,你是如何解决的? 我应该如何压缩 png 图像(使用什么设置)以在合理的文件大小下获得最佳效果?

奖励:我目前正在尝试一种方法来检测图像的文件格式,但如果有人用它来解决类似的问题,请在回答中提及。 编辑:How to get the Image Format of the images from Gallery 是我现在用来获取图像格式的部分,但这实际上并不能回答问题。感谢所有在场的人进行有益的讨论。

【问题讨论】:

  • PNG 是一种无损格式(它具有压缩功能,但不会对图像质量产生任何影响),因此您得到的就是您输入的内容。您通常只对 PNG 压缩设置进行有限控制(如果有)。您的问题似乎是屏幕抓取算法只占用了一小部分可用像素......或者您的分辨率正在管道中的其他地方被故意降低。更多信息(您如何进行屏幕抓取,它们如何发送到您的服务器等)可能会有所帮助。这实际上是一个编程(即 StackOverflow)问题吗?
  • 编辑:愚蠢的 5 分钟。规则 感谢您的回复。是的,这是一个编程问题,即使您提交的链接实际上不是关于编程而是用户检测到的行为。我们的应用程序不会抓取屏幕截图,但用户使用 ROM 中的可用选项制作它们,在三星设备上可以使用 screnshoot 键组合,例如 S2 具有 vol-power。这些是用户可以在我们的应用程序中选择“从图库选项”中选择上传的图像。我知道 PNG 的损失,这是最令人困惑的部分,因为我从无损格式和有损格式中得到最差的结果。
  • 如果您的用户截取屏幕截图,然后在设备上查看生成的文件,是否会出现同样的问题?您说屏幕抓取是 PNG,但您提供的示例是 JPEG。这种转换是在哪里(以及为什么)进行的?
  • 尝试从 Eclipse 截取截图

标签: android screenshot


【解决方案1】:

现在您已经提到了options.inSampleSize 设置,您的问题似乎极有可能是由此引起的:设置options.inSampleSize = 4 告诉编码器丢弃像素(显然字面意思;正确的重采样看起来比您的示例更好) ,这正是您所看到的。

您需要决定哪些应该缩小,哪些不应该缩小 - 您在评论中说,这个设置应该由输入范围决定,所以听起来您已经在这样做了,也许您那里需要一些调试。

我要重申,将 PNG 转换为 JPEG 可能不是最佳选择,除非您的屏幕截图通常包含照片内容。您可能知道,PNG 在压缩照片内容方面非常差,但相反,JPEG 在保持计算机/设备屏幕上常见的各种图像的质量方面非常差。在这种情况下,PNG 通常可以生成比可接受的 JPEG 图像更小的文件。

【讨论】:

  • 感谢您的输入,这就是问题所在,我通过执行developer.android.com/training/displaying-bitmaps/… 上的建议解决了它,所以现在我根据输入图像计算 inSampleSize,如果我不这样做,请不要丢失像素不得不。我知道转换 PNG->JPEG 没有多大意义,两种格式用于不同的目的,但这是我们服务器的要求,并且像截图这样的图像在 jpeg 中保持良好。我将您的答案标记为已接受(第一个回答的问题是 yeeey)。
猜你喜欢
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 2015-09-02
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多