Glide-图片缩放、调整(Image Resizing & Scaling)

写在前面:这篇文章原著是Norman Peitek,所有著作权归原作者所有,我只是在学习Glide的时候看到有间书的作者 weiyf 写了双语的翻译,觉得非常好,但是作者只写了几篇,估计是比较忙吧。于是我就去看原博了,发现原博的英文也不会很难懂,这里只是方便学习做了翻译(顺便学英语(逃),建议英文基础还可以的同学直接看原文:https://futurestud.io/tutorials/glide-image-resizing-scaling

前几篇传送门:

  • 【双语】Glide — 入门(Glide — Getting Started)
  • 【双语】Glide — 高级加载(Glide — Advanced Loading)
  • 【双语】Glide — 列表适配器(ListView, GridView)(Glide — ListAdapter (ListView, GridView))
  • Glide-Placeholders & Fade Animations(默认图与过渡动画)

原文传送门:

  • Displaying Gifs & Videos
  • Caching Basics
  • Request Priorities
  • Thumbnails
  • Callbacks: SimpleTarget and ViewTarget for Custom View Classes
  • Loading Images into Notifications and AppWidgets
  • Exceptions: Debugging and Error Handling
  • Custom Transformations
  • Custom Animations with animate()
  • Integrating Networking Stacks
  • Customize Glide with Modules
  • Glide Module Example: Accepting Self-Signed HTTPS Certificates
  • Glide Module Example: Customize Caching
  • Glide Module Example: Optimizing By Loading Images In Custom Sizes
  • Dynamically Use Model Loaders
  • How to Rotate Images
  • Series Roundup
  • *Advanced ListViews With Images
  • *App Release Preparation
  • How to Choose the Best Caching Preference
  • How to Ignore URL Query Parameters In Cache Lookup (soon)
  • Network-Dependent Image Loading (soon)

正文:

在上一篇博文里,你学习了如何从不同的源加载图片并且设置不同的占位符。如果你还不会在加载的时候调整和裁剪图片,那么本周的博文就很重要啦!

用resize(x,y)设置图片大小

通常来说,如果你的服务器或者API能为你提供你需要的尺寸的图片,那么是最好的。因为这需要在带宽、内存消耗、图片质量之前做一个平衡。
与Picasso相比,Glide在内存消耗上更高效、更智能。Glide会根据所剩的内存和ImageView的大小自动限制图片的尺寸。Picasso也有相似的特性,但是它需要手动调用.fit(),对于Glide而言,如果某些图片不应该被自动调整,那么执行override(horizontalSize, verticalSize),那么这个图片会在显示到ImageView之前被调整为需要的尺寸。

Glide  
    .with(context)
    .load(UsageExampleListViewAdapter.eatFoodyImages[0])
    .override(600, 200) //按照这个像素,调整图片的尺寸,不保持长宽比例
    .into(imageViewResize);

这对于某些情况是挺实用的:当你要加载图片到未知尺寸的View上时;比如,如果app想要在启动页面加载缓存(原文:if the app wants to warm up the cache in the splash screen( warm up the cache不知道啥意思(逃),此时还不能测量ImageView的尺寸。然而,如果你已经知道图片需要多大的尺寸,那么使用override可以得到特定大小的图片。

图片裁剪

现在,因为任何对图片的处理、调整都会导致图片的比例扭曲从而图片看起来很丑。在大部分应用场景下,你都希望避免这种情况的发生。Glide提供了一些常用的变换来改变图片的显示。它附带了两个基本选项: centerCrop和fitCenter。

CenterCrop

CenterCrop() 是一种“去除多余”的裁剪方式,它会把ImageView边界以外的部分裁剪掉。这样一来ImageView会被填充满,但是这张图片可能不会完整地显示出来(ps:因为超出部分都被裁剪掉了)。

Glide  
    .with(context)
    .load(UsageExampleListViewAdapter.eatFoodyImages[0])
    .override(600, 200) // resizes the image to these dimensions (in pixel)
    .centerCrop() // this cropping technique scales the image so that it fills the requested bounds and then crops the extra.
    .into(imageViewResizeCenterCrop);

FitCenter

FitCenter() 是一种“中心匹配”的方式裁剪方式,它裁剪出来的图片长宽都会小于等于ImageView的大小,这样一来。图片会完整地显示出来,但是ImageView可能并没有被填充满。

Glide  
    .with(context)
    .load(UsageExampleListViewAdapter.eatFoodyImages[0])
    .override(600, 200)
    .fitCenter() 
    .into(imageViewResizeFitCenter);

在后面的文章里,我们将会提到除了CenterCrop和FitCenter以外,其他一些自定义的变换。

展望

在这篇文章里,学习了如何调整图片显示的尺寸。这对于设计一款优秀的app是非常有用的。在我们学习Glide更多高级应用之前,我们再多讲一个Glide特有的功能:显示Gif图片和视频。

你可能感兴趣的:(Glide-图片缩放、调整(Image Resizing & Scaling))