鍍金池/ 教程/ Android/ 縮放和旋轉(zhuǎn)圖片
進(jìn)度條
在JAVA代碼中使用Drawees
Drawee的各種效果配置
緩存
一些陷阱
關(guān)于在Android Studio中編譯
多圖請(qǐng)求及圖片復(fù)用
自定義網(wǎng)絡(luò)加載
支持的URIs
可關(guān)閉的引用
監(jiān)聽(tīng)下載事件
修改圖片
引入Fresco
縮放
圓角和圓圈
配置Image Pipeline
縮放和旋轉(zhuǎn)圖片
(圖片請(qǐng)求)Image Requests
自定義View
使用ControllerBuilder
在XML中使用Drawees
開(kāi)始使用 Fresco
關(guān)鍵概念
Image Pipeline介紹
漸進(jìn)式JPEG圖
數(shù)據(jù)源和數(shù)據(jù)訂閱者
直接使用Image Pipeline
動(dòng)畫(huà)圖(gif)
使用其他的Image Loader

縮放和旋轉(zhuǎn)圖片

本教程內(nèi)容來(lái)源于:http://fresco-cn.org
采用 知識(shí)共享 署名 4.0 國(guó)際 許可協(xié)議 進(jìn)行許可

使用這個(gè)功能需要直接創(chuàng)建 image request。

縮放圖片

什么時(shí)候該修改圖片尺寸

一般地,當(dāng)所要顯示的圖片和顯示區(qū)域大小不一致時(shí),會(huì)按以下方式進(jìn)行處理。

  1. 從服務(wù)器下載小一些的圖片
  2. 顯示時(shí)縮放圖片
  3. 調(diào)整圖片尺寸大小

對(duì)于一個(gè)圖片,如果服務(wù)器支持不同尺寸的縮略圖,那么每次下載都選擇尺寸最匹配的圖片,這個(gè)不僅節(jié)省數(shù)據(jù)流量也節(jié)約本地儲(chǔ)存和CPU。

如果服務(wù)器不支持,或者處理本地圖片的話(huà),第二個(gè)選擇是使用縮放類(lèi)型??s放是用Androi內(nèi)置的功能使圖像和顯示邊界相符。在4.0之后,支持硬件加速。這在大部分情況下是最快,同時(shí)也是最高效的顯示一張和顯示邊界大小相符的圖片的方式。首先指定layout_widthlayout_width為指定值,然后指定縮放類(lèi)型

但當(dāng)所要顯示的圖片比顯示區(qū)域大許多的時(shí)候,不推薦這樣做,縮放過(guò)程會(huì)導(dǎo)致大量的內(nèi)存消耗。

這時(shí),需要改變圖片尺寸。

修改圖片尺寸

調(diào)整大小并不是修改原來(lái)的文件,而是在解碼之前,在native內(nèi)存中修改。

這個(gè)縮放方法,比Android內(nèi)置的縮放范圍更大。Android相機(jī)生成的照片一般尺寸都很大,需要調(diào)整大小之后才能被顯示。

目前,僅僅支持JPEG格式的圖片,同時(shí),大部分的Android系統(tǒng)相機(jī)圖片都是JPEG的。

如果要修改圖片尺寸,創(chuàng)建ImageRequest時(shí),提供一個(gè) ResizeOptions:

Uri uri = "file:///mnt/sdcard/MyApp/myfile.jpg";
int width = 50, height = 50;
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
    .setResizeOptions(new ResizeOptions(width, height))
    .build();
PipelineDraweeController controller = Fresco.newDraweeControllerBuilder()
    .setOldController(mDraweeView.getController())
    .setImageRequest(request)
    .build();
mSimpleDraweeView.setController(controller);

自動(dòng)旋轉(zhuǎn)

如果看到的圖片是側(cè)著的,用戶(hù)是難受的。許多設(shè)備會(huì)在JPEG文件的metadata中記錄下照片的方向。如果你想圖片呈現(xiàn)的方向和設(shè)備屏幕的方向一致,你可以簡(jiǎn)單地這樣做到:

ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
    .setAutoRotateEnabled(true)
    .build();
// as above