如果图像大于Glide中要求的大小,如何缩小图像



我使用毕加索已经很久了。今天,我要迁移到格莱德。在Picasso中,我曾经使用以下加载模式:

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作为所需尺寸来调整大小,保持纵横比

仅根据ScaleDown((文档,

只有当原始图像大小大于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中实现这一点?

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

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

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

如果原始图像小于目标图像,则返回原始图像,否则将缩小图像的大小,保持其原始纵横比,以便图像的一个维度与请求的大小完全相等,另一个维度小于或等于请求的大小。如果请求的尺寸大于原始尺寸,则不升级。

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

最新更新