【輪子】Android中的圖片縮放

寫在開頭

本文只是介紹悔据,通過安卓原生的方式將一張?jiān)紙D片縮放到合適的大小庄敛,嚴(yán)格來說是縮放圖片,而非壓縮圖片的技術(shù)
并且由于縮放后的圖片占空間還是較大科汗,并且算法耗時(shí)較長藻烤,所以對(duì)于我的使用場(chǎng)景(壓縮上傳圖片)不是很好用,但是拿來做圖片墻的話還行
若想壓縮上傳圖片的話,還是推薦使用現(xiàn)成的庫怖亭,下面先推薦兩個(gè)圖片壓縮庫涎显,傳送門:
AiYaCompressHelper
Luban

圖片壓縮

生產(chǎn)環(huán)境用戶反映,上傳身份證經(jīng)常會(huì)失敗兴猩,而且很費(fèi)時(shí)間期吓,檢查代碼發(fā)現(xiàn)前輩的代碼寫的漿糊一般,凈出現(xiàn)一些w倾芝,ww讨勤,www的變量名,我知道他們都指代寬width晨另,但原諒后輩腦子笨潭千,實(shí)在記不住誰是誰,只能刪掉重來借尿。
壓縮圖片的思路刨晴,無非就是以下幾步:

  1. 通過inSampleSize減少取樣點(diǎn),先將圖片大概壓縮一下
  2. 通過Matrix垛玻,對(duì)圖片大小進(jìn)行精確調(diào)整
  3. 改變編碼格式割捅,將圖片轉(zhuǎn)存為PNG或者JPG

減少采樣點(diǎn)

減少采樣點(diǎn)是BitmapFactory中提供的一個(gè)方法,主要是用到了inSampleSize參數(shù)帚桩。若inSampleSize為1時(shí),采樣后的圖片就是原始大小的圖片嘹黔,若inSampleSize為2账嚎,則采樣后的圖片的寬高為原圖的1/2,像素面積為原圖的1/4儡蔓,占空間也為1/4郭蕉;若inSampleSize為4,則采樣后的圖片的寬高為原圖的1/4喂江,像素面積為原圖的1/16召锈,占空間也為1/16以此類推。
但是inSampleSize參數(shù)不能為浮點(diǎn)數(shù)获询,以及小于1的數(shù)涨岁,小于1時(shí)作為1來處理,即不能將圖片放大吉嚣,因?yàn)樵砩喜辉试S梢薪。
這里有一個(gè)特殊情況,官方文檔中指出尝哆,inSampleSize參數(shù)取值應(yīng)該為2的冪秉撇,即1、2、4琐馆、8等规阀,若給的值不為2的冪,則會(huì)取一個(gè)比給的值小的最大的2的冪來代替瘦麸。例如inSampleSize參數(shù)取值為10姥敛,則會(huì)用8來代替。但這個(gè)結(jié)論并非在所有系統(tǒng)上成立瞎暑,因此此處應(yīng)該嚴(yán)格控制彤敛,否則會(huì)得到意想不到的結(jié)果。

獲取采樣率的步驟遵循以下流程:

  1. BitmapFactory.Options.inJustDecodeBounds = true了赌,若此時(shí)加載圖片墨榄,只會(huì)加載圖片的寬高信息
  2. 加載圖片,然后從BitmapFactory.Options中取出寬高信息
  3. 根據(jù)目標(biāo)大小計(jì)算采樣率
  4. 可選步驟勿她,BitmapFactory.Options.inPreferredConfig = Config.RGB_565袄秩,將圖像設(shè)為565模式,此時(shí)圖像深度為2字節(jié)逢并。安卓中默認(rèn)模式為RGB_8888之剧,圖像深度為4字節(jié),但大部分情況不需要圖像透明屬性
  5. BitmapFactory.Options.inJustDecodeBounds = false砍聊,重新加載圖片

需要注意的是背稼,降低采樣點(diǎn)加載圖片耗時(shí)較長,一次處理大概需要200-400ms玻蝌,大量圖片請(qǐng)使用線程池蟹肘。

Matrix變換

由于修改采樣點(diǎn)無法將圖片縮放到一個(gè)準(zhǔn)確的大小,所以還需要Matrix做后續(xù)處理俯树。因?yàn)閳D片在內(nèi)存中存儲(chǔ)就是一個(gè)個(gè)像素點(diǎn)帘腹,Matrix可以對(duì)每個(gè)像素點(diǎn)進(jìn)行相應(yīng)的變換,即可完成對(duì)圖像的變換许饿。
需要注意的是阳欲,為什么有了Matrix變換,還需要用更改采樣點(diǎn)的方式做一次預(yù)處理陋率?因?yàn)镸atrix變換需要將圖片加載進(jìn)內(nèi)存操作球化,而現(xiàn)在手機(jī)相機(jī),拍一張圖像大約16M像素點(diǎn)翘贮,若使用RGB_8888模式加載赊窥,一張圖片大概需要60M的內(nèi)存,雖然現(xiàn)在手機(jī)內(nèi)存夠大狸页,但一個(gè)應(yīng)用程序可用內(nèi)存也就幾百M(fèi)锨能,加載大量圖片還是會(huì)OOM扯再。所以應(yīng)該先減少采樣點(diǎn)加載圖片,做好預(yù)處理之后再用Matrix微調(diào)址遇。

順便說一下Matrix熄阻,Matrix基本上就是一個(gè)用來操作圖片的類,但是不止是縮放倔约,還有其他功能秃殉,比如反轉(zhuǎn),位移浸剩,傾斜等

setTranslate(float dx,float dy):位移操作
setSkew(float kx,float ky):傾斜操作钾军,kx、ky為X绢要、Y方向上的比例
setSkew(float kx,float ky,float px,float py):傾斜操作吏恭,以px、py為軸心進(jìn)行傾斜重罪,kx樱哼、ky為X、Y方向上的傾斜比例
setRotate(float degrees):旋轉(zhuǎn)操作剿配,軸心為(0,0)
setRotate(float degrees,float px,float py):旋轉(zhuǎn)操作搅幅,軸心為(px,py)
setScale(float sx,float sy):縮放操作,sx呼胚、sy為X茄唐、Y方向上的縮放比例。
setScale(float sx,float sy,float px,float py):縮放操作砸讳,以(px,py)為軸心進(jìn)行縮放琢融,sx、sy為X簿寂、Y方向上的縮放比例

不過這不是本文的重點(diǎn),不再詳述宿亡。

完整代碼貼出:

import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.Base64;

import java.io.ByteArrayOutputStream;

/**
 * Created by ZhangXuan
 * 圖像縮放工具類
 */
public class ImageScalingUtil {
    /**
     * 通過降低取樣點(diǎn)壓縮圖片常遂,不推薦直接使用<br/>
     * 壓縮后圖像使用RGB_565模式,即每個(gè)像素占位2字節(jié)挽荠,限定寬高壓縮<br/>
     * 由于inSampleSize壓縮比這個(gè)參數(shù)在不同手機(jī)表現(xiàn)不同克胳,有的手機(jī)可以取任意整數(shù),有的手機(jī)只能取2的冪數(shù)圈匆,則取2的冪數(shù)保證所有手機(jī)表現(xiàn)一致漠另。<br/>
     * 需注意,由于inSampleSize的特性跃赚,若限定寬為1000x1000笆搓,實(shí)際圖片寬為1010x600性湿,則該圖片會(huì)被壓縮為505x300,圖片會(huì)較小
     *
     * @param imgPath   原圖片路徑
     * @param reqWidth  最大寬度
     * @param reqHeight 最大高度
     * @return 壓縮后的bitmap
     */
    public static Bitmap reducingBitmapSampleFromPath(String imgPath, int reqWidth, int reqHeight) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;// 讀取大小不讀取內(nèi)容
        options.inPreferredConfig = Config.RGB_565;// 設(shè)置圖片每個(gè)像素占2字節(jié)满败,沒有透明度
        BitmapFactory.decodeFile(imgPath, options);// options讀取圖片

        double outWidth = options.outWidth;
        double outHeight = options.outHeight;// 獲取到當(dāng)前圖片寬高
        int inSampleSize = 1;

        /*
        先計(jì)算原圖片寬高比ratio=width/height肤频,再計(jì)算限定的范圍的寬高比比reqRatio,
        若reqRatio > ratio算墨,則說明限定的范圍更加細(xì)長宵荒,則以高為標(biāo)準(zhǔn)計(jì)算inSampleSize
        否則,則說明限定范圍更加粗矮净嘀,則以寬為計(jì)算標(biāo)準(zhǔn)
         */
        double ratio = outWidth / outHeight;
        double reqRatio = reqWidth / reqHeight;
        if (reqRatio > ratio)
            while (outHeight / inSampleSize > reqHeight) inSampleSize *= 2;
        else
            while (outWidth / inSampleSize > reqWidth) inSampleSize *= 2;

        options.inSampleSize = inSampleSize;
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(imgPath, options);
    }

    /**
     * 通過降低取樣點(diǎn)壓縮圖片报咳,不推薦直接使用<br/>
     * 壓縮后圖像使用RGB_565模式,即每個(gè)像素占位2字節(jié)挖藏,限定大小壓縮<br/>
     * 由于inSampleSize壓縮比這個(gè)參數(shù)在不同手機(jī)表現(xiàn)不同暑刃,有的手機(jī)可以取任意整數(shù),有的手機(jī)只能取2的冪數(shù)熬苍,則取2的冪數(shù)保證所有手機(jī)表現(xiàn)一致稍走。<br/>
     * 需注意,由于inSampleSize的特性柴底,若限定大小為500k婿脸,而原圖為501k,則壓縮后的圖片為125.25k柄驻,圖片會(huì)較小
     *
     * @param imgPath 原圖片路徑
     * @param reqSize 目標(biāo)文件大小狐树,單位為kb
     * @return 壓縮后的bitmap
     */
    public static Bitmap reducingBitmapSampleFromPath(String imgPath, int reqSize) {
        long area = reqSize * 1024 / 2;// 每個(gè)像素占2字節(jié),將需求大小轉(zhuǎn)為像素面積

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;// 讀取大小不讀取內(nèi)容
        options.inPreferredConfig = Config.RGB_565;// 設(shè)置圖片每個(gè)像素占2字節(jié)鸿脓,沒有透明度
        BitmapFactory.decodeFile(imgPath, options);// options讀取圖片

        double outWidth = options.outWidth;
        double outHeight = options.outHeight;// 獲取到當(dāng)前圖片寬高

        int inSampleSize = 1;
        while ((outHeight / inSampleSize) * (outWidth / inSampleSize) > area)
            inSampleSize *= 2;

        options.inSampleSize = inSampleSize;
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(imgPath, options);
    }

    /**
     * 壓縮圖片<br/>
     * 通過設(shè)定壓縮后的寬高的最大像素抑钟,將圖片等比例縮小<br/>
     * 先通過降低取樣點(diǎn),將圖片壓縮到比目標(biāo)寬高稍大一點(diǎn)野哭,然后再通過Matrix將圖片精確調(diào)整到目標(biāo)大小<br/>
     * 壓縮后圖像使用RGB_565模式在塔,即每個(gè)像素占位2字節(jié),限定大小壓縮<br/>
     * 若被壓縮圖片本身就小于限定大小拨黔,則不改變其大小蛔溃,只更改圖像顏色模式為RGB_565<br/>
     * 由于inSampleSize壓縮比這個(gè)參數(shù)在不同手機(jī)表現(xiàn)不同,有的手機(jī)可以取任意整數(shù)篱蝇,有的手機(jī)只能取2的冪數(shù)贺待,則通過混合壓縮的方式保證壓縮的結(jié)果一致<br/>
     *
     * @param imgPath   原圖片路徑
     * @param reqWidth  最大寬度
     * @param reqHeight 最大高度
     * @return 壓縮后的bitmap
     */
    public static Bitmap compressBitmapFromPath(String imgPath, int reqWidth, int reqHeight) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;// 讀取大小不讀取內(nèi)容
        options.inPreferredConfig = Config.RGB_565;// 設(shè)置圖片每個(gè)像素占2字節(jié),沒有透明度
        BitmapFactory.decodeFile(imgPath, options);// options讀取圖片

        double outWidth = options.outWidth;
        double outHeight = options.outHeight;// 獲取到當(dāng)前圖片寬高
        int inSampleSize = 1;

        /*
        先計(jì)算原圖片寬高比ratio=width/height零截,再計(jì)算限定的范圍的寬高比比reqRatio麸塞,
        若reqRatio > ratio,則說明限定的范圍更加細(xì)長涧衙,則以高為標(biāo)準(zhǔn)計(jì)算inSampleSize
        否則哪工,則說明限定范圍更加粗矮奥此,則以寬為計(jì)算標(biāo)準(zhǔn)
         */
        double ratio = outWidth / outHeight;
        double reqRatio = reqWidth / reqHeight;
        if (reqRatio > ratio)
            while (outHeight / inSampleSize > reqHeight) inSampleSize *= 2;
        else
            while (outWidth / inSampleSize > reqWidth) inSampleSize *= 2;

        options.inSampleSize = inSampleSize;
        options.inJustDecodeBounds = false;

        if (1 == inSampleSize) {
            // inSampleSize == 1,就說明原圖比要求的尺寸小或者相等正勒,那么不用繼續(xù)壓縮得院,直接返回。
            return BitmapFactory.decodeFile(imgPath, options);
        }
        /*
        否則的話章贞,先將圖片通過減少采樣點(diǎn)的方式祥绞,以一個(gè)比限定范圍稍大的尺寸讀入內(nèi)存,
        防止因?yàn)閳D片太大而OOM鸭限,以及太大的圖片加載時(shí)間過長
        然后繼續(xù)進(jìn)行壓縮的步驟
        */
        options.inSampleSize = inSampleSize / 2;
        Bitmap baseBitmap = BitmapFactory.decodeFile(imgPath, options);

        /*
        使用之前計(jì)算過的寬高比蜕径,
        若reqRatio > ratio,則說明限定的范圍更加細(xì)長败京,則以高為標(biāo)準(zhǔn)計(jì)算壓縮比
        否則兜喻,則說明限定范圍更加粗矮,則以寬為計(jì)算標(biāo)準(zhǔn)
        */
        float compressRatio = 1;
        if (reqRatio > ratio)
            compressRatio = reqHeight * 1.0f / baseBitmap.getHeight();
        else
            compressRatio = reqWidth * 1.0f / baseBitmap.getWidth();

        Bitmap afterBitmap = Bitmap.createBitmap(
                (int) (baseBitmap.getWidth() * compressRatio),
                (int) (baseBitmap.getHeight() * compressRatio),
                baseBitmap.getConfig());
        Canvas canvas = new Canvas(afterBitmap);
        // 初始化Matrix對(duì)象
        Matrix matrix = new Matrix();
        // 根據(jù)傳入的參數(shù)設(shè)置縮放比例
        matrix.setScale(compressRatio, compressRatio);
        Paint paint = new Paint();
        // 消除鋸齒
        paint.setAntiAlias(true);
        // 根據(jù)縮放比例赡麦,把圖片draw到Canvas上
        canvas.drawBitmap(baseBitmap, matrix, paint);
        return afterBitmap;
    }

    /**
     * 壓縮圖片<br/>
     * 通過設(shè)定壓縮后的大小朴皆,將圖片等比例縮小<br/>
     * 先通過降低取樣點(diǎn),將圖片壓縮到比目標(biāo)寬高稍大一點(diǎn)泛粹,然后再通過Matrix將圖片精確調(diào)整到目標(biāo)大小<br/>
     * 壓縮后圖像使用RGB_565模式遂铡,即每個(gè)像素占位2字節(jié)<br/>
     * 若被壓縮圖片本身就小于限定大小,則不改變其大小晶姊,只更改圖像顏色模式為RGB_565<br/>
     * 由于inSampleSize壓縮比這個(gè)參數(shù)在不同手機(jī)表現(xiàn)不同扒接,有的手機(jī)可以取任意整數(shù),有的手機(jī)只能取2的冪數(shù)们衙,則通過混合壓縮的方式保證壓縮的結(jié)果一致<br/>
     *
     * @param imgPath 原圖片路徑
     * @param reqSize 壓縮后文件大小钾怔,單位為kb
     * @return 壓縮后的bitmap
     */
    public static Bitmap compressBitmapFromPath(String imgPath, int reqSize) {
        long area = reqSize * 1024 / 2;// 每個(gè)像素占2字節(jié),將需求大小轉(zhuǎn)為像素面積

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;// 讀取大小不讀取內(nèi)容
        options.inPreferredConfig = Config.RGB_565;// 設(shè)置圖片每個(gè)像素占2字節(jié)蒙挑,沒有透明度
        BitmapFactory.decodeFile(imgPath, options);// options讀取圖片

        double outWidth = options.outWidth;
        double outHeight = options.outHeight;// 獲取到當(dāng)前圖片寬高

        int inSampleSize = 1;
        while ((outHeight / inSampleSize) * (outWidth / inSampleSize) > area)
            inSampleSize *= 2;

        options.inSampleSize = inSampleSize;
        options.inJustDecodeBounds = false;

        if (1 == inSampleSize) {
            // inSampleSize == 1宗侦,就說明原圖比要求的尺寸小或者相等,那么不用繼續(xù)壓縮忆蚀,直接返回凝垛。
            return BitmapFactory.decodeFile(imgPath, options);
        }

        /*
        否則的話,先將圖片通過減少采樣點(diǎn)的方式蜓谋,以一個(gè)比限定范圍稍大的尺寸讀入內(nèi)存,
        防止因?yàn)閳D片太大而OOM炭分,以及太大的圖片加載時(shí)間過長
        然后繼續(xù)進(jìn)行壓縮的步驟
        */
        options.inSampleSize = inSampleSize / 2;
        Bitmap baseBitmap = BitmapFactory.decodeFile(imgPath, options);

        /*
        目標(biāo)大小的面積與現(xiàn)在圖片大小的面積的比的平方根桃焕,就是縮放比
        java Math.sqrt() 函數(shù)不能開小數(shù),而且先計(jì)算除法捧毛,再計(jì)算開放观堂,再對(duì)結(jié)果求反誤差很大让网,所以做兩次開方計(jì)算
         */
        float compressRatio = 1;
        compressRatio = (float) (Math.sqrt(area) / Math.sqrt(baseBitmap.getWidth() * baseBitmap.getHeight()));

        Bitmap afterBitmap = Bitmap.createBitmap(
                (int) (baseBitmap.getWidth() * compressRatio),
                (int) (baseBitmap.getHeight() * compressRatio),
                baseBitmap.getConfig());
        Canvas canvas = new Canvas(afterBitmap);
        // 初始化Matrix對(duì)象
        Matrix matrix = new Matrix();
        // 根據(jù)傳入的參數(shù)設(shè)置縮放比例
        matrix.setScale(compressRatio, compressRatio);
        Paint paint = new Paint();
        // 消除鋸齒
        paint.setAntiAlias(true);
        // 根據(jù)縮放比例,把圖片draw到Canvas上
        canvas.drawBitmap(baseBitmap, matrix, paint);
        return afterBitmap;
    }

    /**
     * 將一張圖片 以PNG的格式 轉(zhuǎn)換成 base64 編碼
     *
     * @param bitmap
     * @return
     */
    public static String savePNGAndToBase64(Bitmap bitmap) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();// outputstream
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
        byte[] pngByte = baos.toByteArray();// 轉(zhuǎn)為byte數(shù)組
        return Base64.encodeToString(pngByte, Base64.DEFAULT);
    }

    /**
     * 將一張圖片 以JPEG的格式 轉(zhuǎn)換成 base64 編碼
     *
     * @param bitmap
     * @return
     */
    public static String saveJPEGAndToBase64(Bitmap bitmap) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();// outputstream
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] pngByte = baos.toByteArray();// 轉(zhuǎn)為byte數(shù)組
        return Base64.encodeToString(pngByte, Base64.DEFAULT);
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末师痕,一起剝皮案震驚了整個(gè)濱河市溃睹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胰坟,老刑警劉巖因篇,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異笔横,居然都是意外死亡竞滓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門吹缔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來商佑,“玉大人,你說我怎么就攤上這事厢塘〔杳唬” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵晚碾,是天一觀的道長抓半。 經(jīng)常有香客問我,道長迄薄,這世上最難降的妖魔是什么琅关? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮讥蔽,結(jié)果婚禮上涣易,老公的妹妹穿的比我還像新娘。我一直安慰自己冶伞,他們只是感情好新症,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著响禽,像睡著了一般徒爹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芋类,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天隆嗅,我揣著相機(jī)與錄音,去河邊找鬼侯繁。 笑死胖喳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贮竟。 我是一名探鬼主播丽焊,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼较剃,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了技健?” 一聲冷哼從身側(cè)響起写穴,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雌贱,沒想到半個(gè)月后啊送,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帽芽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年删掀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片导街。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡披泪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出搬瑰,到底是詐尸還是另有隱情款票,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布泽论,位于F島的核電站艾少,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏翼悴。R本人自食惡果不足惜缚够,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鹦赎。 院中可真熱鬧谍椅,春花似錦、人聲如沸古话。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽陪踩。三九已至杖们,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肩狂,已是汗流浹背摘完。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留傻谁,地道東北人描焰。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荆秦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 摘要:對(duì)android 上圖片壓縮力图,其實(shí)總結(jié)起來基本可以分為兩類壓縮:尺寸壓縮和質(zhì)量壓縮步绸, 尺寸壓縮其實(shí)也可以理解...
    男爵是只貓丶閱讀 8,764評(píng)論 2 14
  • 目錄介紹 01.如何計(jì)算Bitmap占用內(nèi)存1.1 如何計(jì)算占用內(nèi)存1.2 上面方法計(jì)算內(nèi)存對(duì)嗎1.3 一個(gè)像素占...
    楊充211閱讀 4,040評(píng)論 1 9
  • 2021期待與你一起共事,點(diǎn)擊查看崗位[http://www.reibang.com/p/6f4d67fa406...
    閑庭閱讀 16,610評(píng)論 0 75
  • 圖片壓縮就是為了避免我們內(nèi)存溢出,所有要對(duì)一系列進(jìn)行壓縮二次采樣等 1.什么是OOM赘那?為什么會(huì)引起OOM刑桑? out...
    lay_wn閱讀 957評(píng)論 0 1
  • 7.1 壓縮圖片 一、基礎(chǔ)知識(shí) 1募舟、圖片的格式 jpg:最常見的圖片格式祠斧。色彩還原度比較好,可以支持適當(dāng)壓縮后保持...
    AndroidMaster閱讀 2,487評(píng)論 0 13