【问题标题】:Resize image to exact file size将图像大小调整为精确的文件大小
【发布时间】:2011-07-18 20:32:43
【问题描述】:

实际上我正在开发一个应用程序,我的要求是我必须根据用户选择将大尺寸图像缩放到某个预定义的尺寸。例如,假设我有一个 1Mb 的图像并且用户选择它以将其转换为大小为 100kb 的图像,那么我必须将该图像的大小调整为 100kb。 最后一天,我试图用 Bitmap API 来实现这一点,但我无法达到用户想要的确切大小。有时它很大有时很小。因此,如果有人知道如何将 android 中的图像调整为精确大小(根据用户选择而变化)。 请帮我解决这个问题。

【问题讨论】:

  • 不太确定您要做什么?您是否尝试裁剪部分图片,直到获得用户想要的所需文件大小?或者别的什么,也请包括你所面临的错误。
  • 如果使用 JPEG,您可以通过更改质量级别来改变文件大小。但是,质量级别和文件大小之间没有直接关系,因此您可能需要多次调用 compress 以不同的质量级别:stackoverflow.com/questions/4579647/…

标签: android image resize


【解决方案1】:

如果只有文件大小很重要,您将需要使用不使用压缩的图像文件格式。您应该能够获取具有宽度、高度、位深度等属性的图像,并计算此类图像的预期文件大小。

因此,使用这样的文件格式,您可以从原始图像开始,并且您拥有

文件大小 = 宽度 x 高度 x 位深度 + 元数据/开销。

我假设您也想保持原始纵横比。在这种情况下,您可能只需从当前文件大小中计算出文件大小减少的百分比,然后将宽度和高度乘以相同的百分比。使用位图图像操作 API 缩放图像,然后保存。它应该接近您要查找的文件大小。

特定于 Android Bitmap api,您可以使用 getByteCount() 来确定图像当前占用的字节数。您还可以使用 getConfig() 来确定每个像素的字节数。

因此,您的最终目标文件大小转换为字节数除以每个像素的字节数,即为您允许的像素数。允许的像素数除以当前图像中的像素数将为您提供缩放因子。使用缩放因子并在保持当前纵横比的情况下缩放图像,您应该有一个位图,其像素数接近您的目标。然后保存为不使用压缩的文件格式。

【讨论】:

  • 其实我不明白如何从位图中获取位深度的值。你能给我一些关于这个的细节吗?我在这方面很了解,所以我对图像缩放了解不多。
  • 您可以使用 getByteCount() 来获取存储位图所需的字节数。然后可以使用 getConfig() 来查看当前位图图像格式每个像素占用了多少字节。
  • 我尝试了你的公式,但它不适用于所有图像。对于某些图像,它可以正常工作,而对于某些图像,它会将图像缩小到非常小的尺寸。
  • 您是否有可以在某处发布的无法使用的图片示例?我想查看调整大小前图像的 getByteCount() 结果以及调整大小前图像的 getConfig() 返回的信息。
  • getByteCount() 函数在 android 2.3.3 中不起作用,所以我尝试使用该部分的 fileSize。并重新配置 config = bitmap.getConfig();它的名字是ARGB_8888。是否可以添加一些代码供我参考。
猜你喜欢
  • 2012-10-02
  • 2020-08-18
  • 2014-03-23
  • 2013-08-12
  • 1970-01-01
  • 2020-01-27
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多