也许其他人也遇到过这个问题: 正如标题所示,当将屏幕截图从设备上传到我们的服务器时,图像质量下降相当高。您可以在以下链接中查看一个示例 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 文件(我认为这对于所有 ROM 都是相同的,但可能是错误的),所以这也可能是问题所在。我不明白的是为什么这会成为一个问题,因为据我所知,当您从任何支持的格式读取图像文件时,您会获得该图像的原始数据字节,因此如果原始字节,输入格式不应在输出压缩中发挥作用读取无误。
图像压缩中代码的相关部分仅此而已,但如果需要更多信息,我可以添加更多信息:
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);
我要问的问题是: 有其他人遇到过这个问题吗?你是如何解决的? 我应该如何压缩 png 图像(使用什么设置)才能以合理的文件大小获得最佳结果?
奖励:我目前正在尝试一种方法来检测图像的文件格式,但如果有人用它来解决类似的问题,请在回答中提及。 编辑:How to get the Image Format of the images from Gallery是我现在用来获取图像格式的部分,但这实际上并没有回答问题。感谢所有在场的人进行了有益的讨论。
最佳答案
现在您已经提到了 options.inSampleSize
设置,您的问题很可能是由此引起的:设置 options.inSampleSize = 4
告诉编码器扔掉像素(显然是字面意思;正确的重采样看起来比您的示例更好),这正是您所看到的。
您需要做出一些决定,确定哪些内容应该缩小,哪些内容不应该缩小 - 您在评论中说,此设置应该由输入范围确定,所以听起来您已经在这样做了,也许您那里需要一些调试。
我重申,将 PNG 更改为 JPEG 可能不是最佳选择,除非您的屏幕截图经常包含照片内容。您可能知道,PNG 在压缩照片内容方面非常差,但相反,JPEG 在保持计算机/设备屏幕上常见的各种图像的质量方面非常差。在这种情况下,PNG 通常可以生成比可接受的 JPEG 图像更小的文件。
关于android - 截图压缩质量损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16710277/