【问题标题】:How to only scale-down an image if it is larger than requested size in Glide?如果图像大于 Glide 中请求的大小,如何仅按比例缩小图像?
【发布时间】:2021-12-27 05:56:02
【问题描述】:

我已经使用毕加索很久了。今天,我正在迁移到 Glide。在毕加索,我曾经使用以下加载模式:

Picasso.get()
    .load(file)
    .resize(targetSize, 0)
    .onlyScaleDown()
    .placeholder(R.color.default_surface)
    .error(R.color.default_surface_error)
    .into(imageView)

根据resize(int, int)文档,

使用 0 作为所需的尺寸来调整大小以保持纵横比

根据onlyScaleDown()文档,

仅当原始图像大小大于resize(int, int)指定的目标大小时才调整图像大小

这是我正在尝试的:

Glide.with(imageView)
    .log(this, thumbnailUrl?.toString())
    .load(thumbnailUrl)
    .override(600)
    .placeholder(R.color.default_surface)
    .error(R.color.default_surface_error)
    .into(imageView)

Glide 在使用DownsampleStrategy.CENTER_OUTSIDE 加载图像时使用默认的下采样策略。它说图像被放大以匹配覆盖的大小,使得其中一个维度(最小?)等于覆盖的大小。并且,以下评论:

缩放,保持原始纵横比,使图像的一个尺寸正好等于请求的尺寸,而另一个尺寸大于或等于请求的尺寸。

如果请求的宽度和高度大于源宽度和高度,此方法将放大。为避免升级,请使用 {@link #AT_LEAST}、{@link #AT_MOST} 或 {@link #CENTER_INSIDE}。

DownsampleStrategy.java 中的选项让我很困惑。我不知道我应该使用哪一个。我希望大图像缩小到覆盖的大小,而小图像永远不要放大。如何在 Glide 中实现这一点?

【问题讨论】:

    标签: android picasso android-glide


    【解决方案1】:

    我在Github Issue #3215 找到了答案,建议如下:

    选择一个有用的DownsampleStrategy,特别是CENTER_INSIDE 可能是你要找的。默认的DownsampleStrategy 将放大以最大限度地重复使用位图,但通常有一个等效的策略不会放大。

    而且,DownsampleStrategy.CENTER_INSIDE 符合我的要求:

    如果小于目标,则返回原始图像,否则将在保持其原始纵横比的情况下进行缩小,这样图像的一个尺寸正好等于请求的尺寸,另一个小于或等于请求的尺寸尺寸。如果请求的尺寸大于原始尺寸,则不会放大。

    我对代码中DownsampleStrategy.CENTER_INSIDE 的文档感到困惑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-04
      • 2016-09-15
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 2011-09-20
      相关资源
      最近更新 更多