七牛云圖片上傳和下載注意的問(wèn)題

本文是想給大家分享一下,在向多媒體服務(wù)器上傳圖片再下載圖片我遇到的問(wèn)題贝搁,是很容易被大家忽視的問(wèn)題。

問(wèn)題描述

我們公司同事發(fā)現(xiàn)芽偏,在向多媒體服務(wù)器上傳圖片之后雷逆,再使用服務(wù)器API對(duì)上傳之后的圖片進(jìn)行尺寸剪裁,使用的圖片分辨率為15755 × 3426大小為3MB污尉,剪裁之后的圖片分辨率為8000× 1740大小為16MB膀哲,分辨率降低了圖片大小反而增大,這肯定不是我們想要的結(jié)果被碗,就這個(gè)問(wèn)題我展開(kāi)了調(diào)查某宪,到底是服務(wù)器的問(wèn)題還是客戶(hù)端的問(wèn)題。

問(wèn)題分析

從問(wèn)題上分析原因锐朴,造成圖片大小增大的途徑有兩個(gè)兴喂,其一是向服務(wù)器上傳圖片時(shí)造成圖片大小增大,其二是對(duì)圖片進(jìn)行尺寸剪裁是造成圖片大小增大焚志。而向服務(wù)器上傳圖片的途徑有客戶(hù)端上傳和網(wǎng)頁(yè)端上傳兩種衣迷。從這兩個(gè)途徑展開(kāi)調(diào)查。

網(wǎng)頁(yè)端圖片問(wèn)題調(diào)查

1.問(wèn)題檢查

我先來(lái)檢查一下網(wǎng)頁(yè)端是否會(huì)出現(xiàn)上文描述的問(wèn)題酱酬,按照問(wèn)題描述的步驟在網(wǎng)頁(yè)端進(jìn)行測(cè)試壶谒,使用的測(cè)試圖片如下:


測(cè)試圖片1.jpg



測(cè)試圖片2.jpg

就這兩張圖片進(jìn)行了上傳和剪裁測(cè)試,測(cè)試結(jié)果如下表:


問(wèn)題檢查測(cè)試對(duì)照表

從表中數(shù)據(jù)可以看出測(cè)試圖片2出現(xiàn)問(wèn)題描述的情況而測(cè)試圖片1未出現(xiàn)膳沽,所以網(wǎng)頁(yè)端存在描述問(wèn)題佃迄,需要調(diào)查原因泼差。

2.網(wǎng)頁(yè)端上傳圖片調(diào)查

調(diào)查是否是在網(wǎng)頁(yè)端上傳圖片后造成圖片大小增大,向服務(wù)器上傳之前兩張圖片再下載不進(jìn)行剪裁呵俏,測(cè)試結(jié)果如下表:


網(wǎng)頁(yè)端上傳圖片測(cè)試對(duì)照表

從表中可以看出網(wǎng)頁(yè)端上傳圖片后未造成圖片大小增大堆缘,所以不是上傳圖片造成圖片大小增大的。

3.網(wǎng)頁(yè)端剪裁圖片調(diào)查

調(diào)查是否是在網(wǎng)頁(yè)端使用服務(wù)器剪裁圖片的API造成圖片大小增大的普碎,對(duì)兩張測(cè)試圖片進(jìn)行剪裁得到測(cè)試結(jié)果如下表:


網(wǎng)頁(yè)端剪裁圖片測(cè)試對(duì)照表

從表中數(shù)據(jù)可以看出圖片剪裁后可能造成圖片大小增大吼肥,并非必然現(xiàn)象,分析了一下原因麻车,可能與圖片的Exif信息不同有關(guān)缀皱,檢查兩張圖片的Exif信息,其中一個(gè)屬性吸引了我注意动猬,就是quality屬性啤斗,就是jpg等有損壓縮圖片格式的質(zhì)量值,理論上這個(gè)值越大圖片質(zhì)量越好圖片大小越大赁咙,測(cè)試圖片1.jpg的quality值為80钮莲,測(cè)試圖片2.jpg的quality值為60,并且這個(gè)quality值在我使用的服務(wù)器剪裁圖片API中也是個(gè)非必選的參數(shù)彼水,既然是非必選那必然有個(gè)默認(rèn)值崔拥,查文檔是75,那問(wèn)題的原因就了然了凤覆。

可以得出推論:如果進(jìn)行剪裁的圖片的quality小于75且剪裁的尺寸不大的情況下后造成圖片大小增大問(wèn)題链瓦,原因是剪裁后圖片的quality被修改成75,如果剪裁的圖片的quality為75大小則正常變化盯桦。

為了印證推論再進(jìn)行對(duì)兩張測(cè)試圖片進(jìn)行圖片剪裁測(cè)試慈俯,測(cè)試結(jié)果如下表所示:


推論測(cè)試圖片2剪裁測(cè)試對(duì)照表


推論測(cè)試圖片3剪裁測(cè)試對(duì)照表

從兩表的數(shù)據(jù)可以看出,符合推論的內(nèi)容拥峦,所以證明推論正確贴膘。

4.問(wèn)題調(diào)查結(jié)論

服務(wù)器網(wǎng)頁(yè)端存在描述問(wèn)題,造成原因?yàn)閷?duì)quality低于75的圖片進(jìn)行小幅度剪裁時(shí)事镣,剪裁方法會(huì)將剪裁圖片的quality修改為75使其圖片大小增大步鉴。

Android客戶(hù)端圖片問(wèn)題調(diào)查

1.問(wèn)題檢查

網(wǎng)頁(yè)端出現(xiàn)描述問(wèn)題揪胃,但不排除客戶(hù)端會(huì)出現(xiàn)同樣問(wèn)題璃哟,檢查客戶(hù)端服務(wù)器API文檔發(fā)現(xiàn)和網(wǎng)頁(yè)端一致,所以網(wǎng)頁(yè)端出現(xiàn)的問(wèn)題客戶(hù)端同樣會(huì)出現(xiàn)喊递,網(wǎng)頁(yè)端和客戶(hù)端的區(qū)別在于客戶(hù)端上傳圖片之前會(huì)對(duì)圖片進(jìn)行壓縮處理具體代碼如下圖所示:


圖片上傳前壓縮處理源碼圖

從代碼中可以看出在圖片進(jìn)行壓縮之前調(diào)用Bitmap.compress壓縮方法此時(shí)的目的僅僅是想將Bitmap對(duì)象轉(zhuǎn)換成字節(jié)流對(duì)象不對(duì)圖片進(jìn)行壓縮随闪,上網(wǎng)查看公認(rèn)的說(shuō)法是compress方法的quality參數(shù)設(shè)置成100就是不進(jìn)行壓縮,所以此次預(yù)設(shè)成100骚勘,之后再判斷字節(jié)流對(duì)象大小如果大于200kb進(jìn)行壓縮處理铐伴。

為了檢查客戶(hù)端是否會(huì)出現(xiàn)服務(wù)器api以外原因造成的圖片問(wèn)題撮奏,對(duì)客戶(hù)端進(jìn)行圖片上傳測(cè)試,由于圖片大小大于200kb會(huì)進(jìn)行壓縮当宴,所以使用大小小于200kb的圖片進(jìn)行測(cè)試畜吊,測(cè)試結(jié)果如下表所示:


客戶(hù)端問(wèn)題檢查測(cè)試對(duì)照表


從表中數(shù)據(jù)可以看出圖片在客戶(hù)端上傳后出現(xiàn)大小增大問(wèn)題,而且圖片的quality值也增大了户矢,所以需要調(diào)查原因玲献。

2.問(wèn)題調(diào)查

從源碼中可以看出造成圖片大小增大的原因只能是Bitmap.compress方法,查看官方描述文字如下圖所示:


Bitmap.compress方法官方描述截圖

從圖中對(duì)參數(shù)quality的描述發(fā)現(xiàn)梯浪,并沒(méi)有說(shuō)明quality設(shè)置成100后不對(duì)Bitmap對(duì)象進(jìn)行壓縮捌年,所以之前理解的compress方法的使用可能存在問(wèn)題,得出推論compress方法的quality參數(shù)含義為將處理后圖片的quality值設(shè)置成參數(shù)值挂洛,也就是如果quality參數(shù)的值與處理圖片的quality值相等礼预,那么處理后圖片的大小將不變。

為了印證推論在客戶(hù)端進(jìn)行圖片上傳測(cè)試虏劲,測(cè)試時(shí)將compress方法的quality參數(shù)設(shè)置成與處理圖片的quality相同的值也就是75托酸,測(cè)試結(jié)果如下表所示:

?

印證推論客戶(hù)端圖片上傳測(cè)試對(duì)照表

?從表中數(shù)據(jù)可以得出推論正確。

3.問(wèn)題結(jié)論

客戶(hù)端存在網(wǎng)頁(yè)端相同的問(wèn)題原因一致伙单,且出現(xiàn)上傳圖片后圖片大小增大的新問(wèn)題获高,造成原因?yàn)樵趫D片大小低于200kb且quality低于100的情況進(jìn)行Bitmap.compress(參數(shù)quality設(shè)置為100)進(jìn)行處理后圖片的quality被修改為100從而使其圖片大小增大。

Android客戶(hù)端圖片上傳優(yōu)化

根據(jù)客戶(hù)端圖片問(wèn)題調(diào)查得出的結(jié)論可知吻育,在圖片無(wú)需壓縮調(diào)用Bitmap.compress方法時(shí)念秧,將參數(shù)quality設(shè)置成處理圖片的quality值,處理后的圖片將不會(huì)變大布疼,所以需要事先得出處理圖片的quality值摊趾,實(shí)現(xiàn)方法源碼如下圖所示:


查找圖片的quality信息源碼圖

從源碼中可以看出是查看圖片的Exif信息再在其中查找quality信息,所以圖片如果沒(méi)有Exif信息或者Exif信息缺失則無(wú)法得到quality的值游两。在這種情況下對(duì)代碼進(jìn)行進(jìn)一步優(yōu)化砾层,優(yōu)化代碼如下圖所示:


客戶(hù)端獲取圖片quality優(yōu)化源碼圖

從源碼中可以看出通過(guò)反復(fù)對(duì)圖片進(jìn)行壓縮處理,根據(jù)處理后的圖片大小從而得出圖片的quality的值贱案。其實(shí)此代碼還可以進(jìn)一步優(yōu)化的肛炮,因?yàn)槊看味际菑膓uality為100開(kāi)始?jí)嚎s,如果圖片的quality比較低宝踪,那么循環(huán)將很耗時(shí)侨糟,這同樣不是我們想要的結(jié)果,我們可以通過(guò)圖片的大小和分辨率通過(guò)計(jì)算預(yù)估出quality值瘩燥,再進(jìn)行循環(huán)方法使quality值更加精確秕重,這樣將是更好的處理方法。

總結(jié)

出現(xiàn)上文描述的問(wèn)題厉膀,主要的原因是我們對(duì)服務(wù)器API接口的默認(rèn)參數(shù)值的疏忽溶耘,還有對(duì)Android客戶(hù)端Bitmap.compress方法的quality參數(shù)的誤解造成的二拐,尤其是后者我在網(wǎng)上查閱了很多文章,都將compress方法的quality參數(shù)設(shè)置成100理解為不進(jìn)行圖片壓縮凳兵,這是大家普遍的誤解百新,往往就是這些我們?nèi)菀缀鲆暤氖虑椋瑫?huì)造成一些很難處理的問(wèn)題庐扫,我寫(xiě)本文的目的吟孙,就是想給大家分享一下我調(diào)查此事的經(jīng)驗(yàn),希望大家不要出現(xiàn)我們這樣的問(wèn)題聚蝶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杰妓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碘勉,更是在濱河造成了極大的恐慌巷挥,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件验靡,死亡現(xiàn)場(chǎng)離奇詭異倍宾,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)胜嗓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)高职,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人辞州,你說(shuō)我怎么就攤上這事怔锌。” “怎么了变过?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵埃元,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我媚狰,道長(zhǎng)岛杀,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任崭孤,我火速辦了婚禮类嗤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辨宠。我一直安慰自己遗锣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布彭羹。 她就那樣靜靜地躺著黄伊,像睡著了一般泪酱。 火紅的嫁衣襯著肌膚如雪派殷。 梳的紋絲不亂的頭發(fā)上还最,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音毡惜,去河邊找鬼拓轻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛经伙,可吹牛的內(nèi)容都是我干的扶叉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼帕膜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼枣氧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起垮刹,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤达吞,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后荒典,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體酪劫,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年寺董,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了覆糟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡遮咖,死狀恐怖滩字,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情御吞,我是刑警寧澤踢械,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站魄藕,受9級(jí)特大地震影響内列,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜背率,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一话瞧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寝姿,春花似錦交排、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至根资,卻和暖如春架专,著一層夾襖步出監(jiān)牢的瞬間同窘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工部脚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留想邦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓委刘,卻偏偏與公主長(zhǎng)得像丧没,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锡移,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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