webp圖片格式轉(zhuǎn)換珍促,以及安卓使用webp圖片導(dǎo)致的友盟分享失斄逑健(友盟6.X SDK)的坑

本身公司的項目,圖片展示居多猪叙,服務(wù)器壓力也比較大澳叉,所以使用webp格式圖片也就提上了日程。webp省流量省空間沐悦,不過你要來找到現(xiàn)在這篇關(guān)于友盟分享失敗的文章的話成洗,相信webp格式圖片也已經(jīng)有過了解,就不再多說藏否。
google在4.0后已經(jīng)支持了(4.0-4.2.1不支持無損以及透明度webp圖片)webp格式 瓶殃,所以其實需要做轉(zhuǎn)換的地方其實很少。但是有一些第三方SDK對webp支持的不是很好副签,所以有了本文遥椿。
友盟分享實用的是自定義的 UMImage

 UMImage umImage= new UMImage(mActivity, myBitmap);
//具體的分享方法
new ShareAction(mActivity)
   .withTitle(title)
   .withText(text)
   .withTargetUrl(targetUrl)
   .withMedia(umImage)
   .setPlatform(shareMedia)
   .setCallback(umShareListener)
   .share();

由于不是講分享的,所以上面值列出簡單的實現(xiàn)部分代碼淆储。
然后可以看一下具體UMImage的方法冠场,雖然已經(jīng)混淆,但是大概可以看出來UMImage支持分享的參數(shù)類型:(a 方法就是混淆后的 UMImage構(gòu)造方法)

  private void a(Context var1, Object var2) {
        if(var2 instanceof File) {
            this.e = new UMImage.FileConvertor((File)var2);
        } else if(var2 instanceof String) {
            this.e = new UMImage.UrlConvertor((String)var2);
        } else if(var2 instanceof Integer) {
            this.e = new UMImage.ResConvertor(var1, ((Integer)var2).intValue());
        } else if(var2 instanceof byte[]) {
            this.e = new UMImage.BinaryConvertor((byte[])((byte[])var2));
        } else {
            if(!(var2 instanceof Bitmap)) {
                throw new RuntimeException("Don\'t support type");
            }
            this.e = new UMImage.BitmapConvertor((Bitmap)var2);
        }
        this.e.setConfig(new UMImage.ConvertConfig(var1));
    }

可以看到支持的種類是本砰,文件碴裙,uri(網(wǎng)絡(luò)地址,進(jìn)方法查看就是下載編譯后進(jìn)行設(shè)置点额,不再展開來說了)舔株,資源文件,byte[]还棱,其他種類會走最后的else方法载慈,但是不是bitmap的話就會拋異常,提示不支持的分享類型珍手。所以在我們傳遞一個webp的地址或者webp格式圖片的時候就會報錯办铡。
所以如果想要繼續(xù)使用那就只有轉(zhuǎn)換webp格式圖片后使用辞做。所以當(dāng)有了圖片地址后,很容易想到的就是下載然后轉(zhuǎn)換為bitmap/file等類型寡具。所以我去找了很多webp格式轉(zhuǎn)換的方式凭豪,但是都要引入jar包之類的,增加安裝包體積不說晒杈,使用還挺麻煩。但是安卓又已經(jīng)列出來是支持webp的孔厉。
后來找到一個簡單的方式拯钻。就一句話

Bitmap bmp = BitmapFactory.decodeFile(webp);

bitmap工廠,是可以直接decode webp圖片為bitmap的撰豺,就跟你放入一個jpg的圖片一樣使用粪般。
所以第一種方式

File file=down(url);//項目的下載文件的方法,可能每個人封裝的不同污桦,我就簡單描述下

 new Thread(){
            @Override
            public void run() {
                Bitmap bmp = BitmapFactory.decodeFile(flie);
                image = new UMImage(mActivity, bmp);
            }
        }.start();

用這個寫完之后感覺會很麻煩亩歹,還要考慮4.0之前的用戶(雖然并不會有4.0前的用戶了),畢竟是圖片下載嘛凡橱,還要考慮圖片緩存啥等亂七八糟的小作,不然每次一個頁面每啟動一次分享都要下載一張圖片也是挺傻的事兒。所以想到了項目中使用的Glide稼钩,那么有沒有g(shù)lide自帶方法來完成這次操作的呢顾稀?
其實我們要做的,就是1 下載 2 decode為byte[]/bitmap 所以只要glide滿足下載操作或者編譯操作就可以了
參考Glide downloadonly
需要注意的是坝撑,后面一個方法

Bitmap myBitmap = Glide.with(applicationContext)
    .load(yourUrl)
    .asBitmap()
    .centerCrop()
    .into(500, 500)
    .get()

寫的比較清楚的是静秆,Although[into(int, int)]works well on background threads, note that you must not use it on the main thread. Even if the synchronous version of into did not throw an exception when used on the main thread, calling get() would block the main thread, reducing the performance and responsiveness of your app.簡單說就是要寫在子線程中。
所以方法2巡李,Glide下載文件抚笔,使用上面提到的文件方式設(shè)置。

final FutureTarget<File> future = Glide.with(mActivity)
        .load(picUrl)
        .downloadOnly(500, 500);
    new Thread(){
        @Override
        public void run() {
            File cacheFile = null;
            try {
                cacheFile = future.get();
                umImage = new UMImage(mActivity, cacheFile);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        }
    }.start();

方式3侨拦,使用Glide下載并decode圖片為bitmap再進(jìn)行設(shè)置給友盟

new Thread(){
    @Override
    public void run() {
        try {
            Bitmap myBitmap = Glide.with(myActivity)
                    .load(picUrl)
                    .asBitmap()
                    .centerCrop()
                    .into(500, 500)
                    .get();
            umImage= new UMImage(mActivity, myBitmap);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}.start();

除此之外殊橙,需要注意的點還有,方式一狱从,BitmapFactory.decode是一個比較耗時的操作蛀柴,雖然可能寫在MainThread也可能不會出錯(實際上會偶爾失敗)矫夯,但是還是強烈建議寫在子線程中鸽疾。

最后,敬業(yè)福哪里搞训貌?

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末制肮,一起剝皮案震驚了整個濱河市冒窍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豺鼻,老刑警劉巖综液,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異儒飒,居然都是意外死亡谬莹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門桩了,熙熙樓的掌柜王于貴愁眉苦臉地迎上來附帽,“玉大人,你說我怎么就攤上這事井誉〗栋纾” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵颗圣,是天一觀的道長喳钟。 經(jīng)常有香客問我,道長在岂,這世上最難降的妖魔是什么奔则? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蔽午,結(jié)果婚禮上应狱,老公的妹妹穿的比我還像新娘。我一直安慰自己祠丝,他們只是感情好疾呻,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著写半,像睡著了一般岸蜗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叠蝇,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天璃岳,我揣著相機與錄音,去河邊找鬼悔捶。 笑死铃慷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜕该。 我是一名探鬼主播犁柜,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼堂淡!你這毒婦竟也來了馋缅?” 一聲冷哼從身側(cè)響起扒腕,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萤悴,沒想到半個月后瘾腰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡覆履,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年蹋盆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硝全。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡栖雾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柳沙,到底是詐尸還是另有隱情,我是刑警寧澤拌倍,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布赂鲤,位于F島的核電站,受9級特大地震影響柱恤,放射性物質(zhì)發(fā)生泄漏数初。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一梗顺、第九天 我趴在偏房一處隱蔽的房頂上張望泡孩。 院中可真熱鬧,春花似錦寺谤、人聲如沸仑鸥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眼俊。三九已至,卻和暖如春粟关,著一層夾襖步出監(jiān)牢的瞬間疮胖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工闷板, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留澎灸,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓遮晚,卻偏偏與公主長得像性昭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子县遣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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