【问题标题】:How to compress GIF image before uploading to server in android?如何在android中上传到服务器之前压缩GIF图像?
【发布时间】:2020-09-15 22:45:07
【问题描述】:

如何在将 GIF 图像上传到服务器之前对其进行压缩?,我尝试了一些 android 库来压缩 gif 图像,但它会将其转换为 png 图像。有什么方法可以压缩 gif 图像吗?

【问题讨论】:

  • GIF 是一种压缩文件格式。 GIF 图像已被压缩。
  • @CommonsWare 我知道,但是 gif 图像尺寸太大,将大尺寸图像上传到服务器不是一个好习惯,我正在尝试减小尺寸
  • 那会降低图像的分辨率,而不是压缩。

标签: android compression gif


【解决方案1】:

我在我的项目中使用位图。

Bitmap

示例代码:

 ImageView carView = (ImageView) v.findViewById(R.id.imagen_cr7);

                        byte[] decodedString = Base64.decode(picture, Base64.NO_WRAP);
                        InputStream input=new ByteArrayInputStream(decodedString);
                        Bitmap ext_pic = BitmapFactory.decodeStream(input);
                        carView.setImageBitmap(ext_pic);

【讨论】:

  • 你能提供一个你的解决方案的例子让你更清楚吗?
  • byte[] decodedString = Base64.decode(person_object.getPhoto(),Base64.NO_WRAP); InputStream inputStream = new ByteArrayInputStream(decodedString);位图位图 = BitmapFactory.decodeStream(inputStream); user_image.setImageBitmap(位图);
【解决方案2】:

GIF 是一种无损图像压缩格式:它被设置为精确地再现图像。 因此,没有“图像质量”滑块(如在 JPEG 编码器中);尽管 GIF 可能比未压缩格式(例如许多相机 RAW 或常见 TIFF 选项)小得多,但它可以走多远是有限度的。

此外,您应该知道 GIF 被限制为每像素 8 位(因此它最适合线条艺术,而不是类似照片的图像)。如果您的源图像是完整的 24 位,则必须对其进行抖动以适合 256 项的调色板。因此,虽然 GIF 格式本身是无损的,但首先使用它所需的图像处理可能是有损的。

您可以采取多种措施来减小图像文件的大小:

  • 您可以选择一种有损格式(例如 JPEG),这将允许更大的压缩。请注意,JPEG 适用于类似照片的图像,但不适用于线条艺术。此外,(尽管您的问题明确拒绝)PNG 可能是一个合理的选择,因为它(无损)支持 24-bpp 图像。
  • 正如评论中所提到的,您可以尝试降低图像的分辨率,并发送缩小版。如果您无法从一开始就生成较小的图像,则图像调整大小通常适用于类似照片的图像,并且有专门用于处理线条艺术的非线性调整大小过滤器。
  • 如果您的应用程序必须使用全分辨率 GIF,则您可以生成更可通过 GIF 格式压缩的图像。 GIF 可以非常好地压缩纯色块,但在抖动或嘈杂的图像(例如将 24-bpp 图像转换为 GIF 格式时可能会得到)效果较差。

由于您没有提供任何有关您的要求的信息(您拥有什么样的图像、从哪里获得以及您需要它),因此很难提出具体的建议。

但是,您的 GIF 很有可能比您的特定应用程序所需的分辨率高得多(导致选项 #2)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2016-09-16
    • 2011-05-22
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    相关资源
    最近更新 更多