【问题标题】:Glide - download and resize GIF into a fileGlide - 下载 GIF 并将其大小调整为文件
【发布时间】:2016-10-23 00:04:38
【问题描述】:

我需要下载一个 GIF 并将其保存到外部存储中,以便我可以通过 MMS 发送它。消息有 300kb 的限制,而且大多数 GIF 太大,所以我需要调整它们的大小。

我在我的项目的其余部分使用 Glide,Glide 有一个漂亮的功能,理论上应该可以下载调整大小的图像。但事实并非如此。

简而言之,这是我在后台线程中调用的代码:

byte[] bytes = Glide.with(context)
                    .load(url)
                    .asGif()
                    .toBytes()
                    .into(250, 250)
                    .get();
file = new File(fileName);

FileOutputStream fileWriter = new FileOutputStream(file);
fileWriter.write(bytes);
fileWriter.flush();
fileWriter.close();

下载的文件仍保持其原始大小,高于 MMS 300kb 的限制,而它们应为 250x250 像素。

【问题讨论】:

  • 使用 override(250, 250) 或将 byte 转换为 bitmap 并根据所需尺寸调整大小并将其保存到外部存储。
  • 覆盖似乎没有做任何事情。将 byte[] 转换为位图不起作用。它只是将其保存为 .png

标签: android android-glide


【解决方案1】:

在 Glide Github 上问了同样的问题,并在那里得到了答案。显然 Glide 只会调整大于 500 x 500 的图像大小,除非使用 fitCenter()(或任何其他)转换。

因此,要调整 .gif 文件的大小,请使用以下代码:

byte[] bytes = Glide.with(context)
                        .load(url)
                        .asGif()
                        .toBytes()
                        .transform(new GifDrawableTransformation(new CenterCrop(context), Glide.get(context).getBitmapPool()))
                        .into(250, 250)
                        .get();

【讨论】:

  • 如果你没有指定 Transformation,Glide 将使用你设置的任何 Downsampler(或默认值)来对图像进行下采样。 Android 仅支持 2 次下采样的幂,这意味着,如果不进行转换,调整大小是不精确的。默认的 Downsampler 下采样到请求的大小和请求大小的 2 倍之间。见bumptech.github.io/glide/javadocs/360/com/bumptech/glide/load/…
  • asGif 在 load() 给出错误之后找不到符号,但在加载之前工作正常。
  • 好的,您的代码 sn-p 基于 glide v3。如果您也可以为 v4 编写此内容,那将非常高兴。
【解决方案2】:

您也可以压缩该文件,然后存储在数据库中 这个链接会帮助你。在这首先将 .gif 转换为 .png 然后使用它。 Android - Best way to convert .gif to .png

【讨论】:

  • 向 OP 显示一些 sn-p
  • 这没有帮助。我需要一个外部存储中的文件,以便我可以通过彩信发送它。
猜你喜欢
  • 2019-01-22
  • 2011-07-29
  • 1970-01-01
  • 2012-09-23
  • 2016-04-05
  • 2011-11-01
  • 2021-05-15
  • 2013-08-14
  • 1970-01-01
相关资源
最近更新 更多