【kimol君的無(wú)聊小發(fā)明】—用python寫(xiě)圖片格式批量處理工具

前言

一鲫寄、思路分析

二收擦、調(diào)整尺寸

三梧乘、調(diào)整大小

四、整合代碼

寫(xiě)在最后

前言

某個(gè)夜深人靜的夜晚,夜微涼風(fēng)微揚(yáng),月光照進(jìn)我的書(shū)房~

當(dāng)我打開(kāi)文件夾以回顧往事之余,驚現(xiàn)許多看似雜亂的無(wú)聊代碼蒙挑。我拍腿正坐,一個(gè)想法油然而生:“生活已然很無(wú)聊愚臀,不如再無(wú)聊些叭”忆蚀。

于是,我決定開(kāi)一個(gè)專題,便稱之為kimol君的無(wú)聊小發(fā)明馋袜。

妙…啊~~~

就在昨天男旗,正當(dāng)我在刺激戰(zhàn)場(chǎng)廝殺時(shí),“叮叮短一溃”剑肯,微信來(lái)消息了。我心想:“這是腎馬情況观堂?” 我打開(kāi)一看让网,原來(lái)是小姐姐讓我?guī)兔μ幚碚掌瑍?樂(lè)于助人的我(小聲嘀咕:“我信你個(gè)鬼,壞得很”)师痕,自然是立馬放下游戲溃睹,奔向助人的前線,于是:

沒(méi)有錯(cuò)~ 面對(duì)來(lái)自小姐姐的任務(wù)胰坟,kimol君自是當(dāng)仍不讓因篇,打開(kāi)美圖秀秀,嗖嗖兩下便搞定了笔横,成功收獲兩顆小愛(ài)心????~

正當(dāng)我沾沾自喜的時(shí)候竞滓,小姐姐又發(fā)來(lái)一個(gè)壓縮包,說(shuō)是同學(xué)和閨蜜的吹缔,讓我?guī)兔σ黄鹋幌律逃印N掖蜷_(kāi)一看:

37張照片,我能怎么辦厢塘? 我也很絕望呀…

畢竟有一顆炙熱助人的心(畫(huà)外音:“畢竟是小姐姐讓幫忙”)茶没,不可能放著不管,但總不能一張一張的調(diào)叭晚碾,看來(lái)只能寫(xiě)一個(gè)小工具來(lái)批量處理了抓半。

一、思路分析

其實(shí)格嘁,照片處理要求很簡(jiǎn)單笛求,主要是兩個(gè)方面:一個(gè)是調(diào)整圖片尺寸(即寬x高),另一個(gè)是調(diào)整圖片的大懈獠尽(即壓縮)涣易。為了實(shí)現(xiàn)這兩個(gè)功能,利用python中的PIL庫(kù)即可冶伞,其安裝方法如下:

pip install pillow


說(shuō)明:PIL官方版不支持python3,不過(guò)非官方pillow可作為其替代品。

導(dǎo)入相關(guān)的庫(kù):

fromPILimportImage


讀取圖片:

image=Image.open('xxx.jpg')


利用resize()函數(shù)即可對(duì)圖片的尺寸進(jìn)行調(diào)整:

image=image.resize((width,height))


其中width和height分別為預(yù)期調(diào)整的圖片寬和圖片高步氏。

利用save()函數(shù)即可對(duì)圖片進(jìn)行壓縮响禽,進(jìn)而調(diào)整其大小:

image.save('out.jpg',quality=60)


其中quality表示壓縮的比例。

二芋类、調(diào)整尺寸

首先一個(gè)函數(shù)隆嗅,用于調(diào)整圖片的尺寸:

defresize(inImage,width,height,inplace=False):'''

? ? 將圖片調(diào)整為指定尺寸

? ? ----------------------------

? ? 參數(shù) inImage:需要處理的圖片地址

? ? 參數(shù)? width:預(yù)期圖片寬度

? ? 參數(shù)? height:預(yù)期圖片高度

? ? 參數(shù) inplace:是否覆蓋原文件

? ? ----------------------------

? ? 返回 outImage:壓縮后的圖片地址

? ? '''ifnotinplace:# 如果不覆蓋outImage='%s-out.%s'%(inImage.split('.')[0],inImage.split('.')[1])else:outImage=inImage? ? image=Image.open(inImage)image=image.resize((width,height))image.save(outImage)print('"%s"調(diào)整成功!(尺寸:%dx%d)'%(inImage,width,height))returnoutImage

三侯繁、調(diào)整大小

首先定義一個(gè)函數(shù)胖喳,用于獲取圖片的文件大小:

defget_size(fileName):'''

? ? 獲取圖片文件的大兄埂(KB)

? ? --------------------

? ? 參數(shù) fileName: 文件名

? ? --------------------

? ? 返回 fileSize:文件的大小

? ? '''fileSize=os.path.getsize(fileName)fileSize/=1024# 將單位轉(zhuǎn)為KBreturnfileSize

然后丽焊,通過(guò)不斷調(diào)整壓縮比率quality,來(lái)使得圖片到達(dá)指定的大小咕别,具體過(guò)程如下:

defcompress(inImage,targetSize,step=5,quality=75,inplace=False):'''

? ? 將圖片壓縮到指定的大小

? ? -------------------------------

? ? 參數(shù)? ? inImage:需要處理的圖片地址

? ? 參數(shù) targetSize:預(yù)期壓縮的大小

? ? 參數(shù)? ? ? step:每次迭代的壓縮比

? ? 參數(shù)? ? quality:初始?jí)嚎s比

? ? 參數(shù)? ? inplace:是否覆蓋原文件

? ? -------------------------------

? ? 返回 outImage:壓縮后的圖片地址

? ? '''ifnotinplace:# 如果不覆蓋outImage='%s-out.%s'%(inImage.split('.')[0],inImage.split('.')[1])else:outImage=inImage? ? fileSize=get_size(inImage)whilefileSize>targetSize:image=Image.open(inImage)image.save('temp.jpg',quality=quality)fileSize=get_size('temp.jpg')quality-=step# 調(diào)整壓縮比ifquality<0:print('"%s"壓縮失敿冀 !(請(qǐng)調(diào)整step)'%inImage)returnifos.path.exists('temp.jpg'):copyfile('temp.jpg',outImage)os.remove('temp.jpg')# 移處臨時(shí)文件print('"%s"壓縮成功惰拱!(大写萍:%.2fKB)'%(inImage,fileSize))returnoutImage


四、整合代碼

將resize()和compress()兩個(gè)函數(shù)整合到一起:

defadjust(inImage,width,height,targetSize,inplace=False):'''

? ? 將圖片調(diào)整為指定格式(包括尺寸及大谐ザ獭)

? ? -------------------------------

? ? 參數(shù)? ? inImage:需要處理的圖片地址

? ? 參數(shù)? ? ? width:預(yù)期圖片寬度

? ? 參數(shù)? ? height:預(yù)期圖片高度

? ? 參數(shù) targetSize:預(yù)期壓縮的大小

? ? 參數(shù)? ? inplace:是否覆蓋原文件

? ? -------------------------------

? ? 返回 outImage:調(diào)整后的圖片地址

? ? '''ifnotinplace:# 如果不覆蓋outImage='%s-out.%s'%(inImage.split('.')[0],inImage.split('.')[1])else:outImage=inImage? ? resize(inImage,width,height,inplace=inplace)compress(outImage,targetSize,inplace=True)returnoutImage


調(diào)用方法如下:

if__name__=='__main__':adjust('xxx.jpg',600,800,100)


隨后欣孤,通過(guò)寫(xiě)一個(gè)循環(huán),將壓縮包里的所有圖片進(jìn)行處理昔逗,便得到了預(yù)期的格式降传。

寫(xiě)在最后

其實(shí),這個(gè)小工具還有許多可以完善的地方纤子,比如針對(duì)壓縮方式搬瑰、圖片質(zhì)量、效率等等都能做一些優(yōu)化控硼。此外泽论,當(dāng)然也可以考慮做一個(gè)GUI以更加方便的操作。感興趣的小伙伴卡乾,可以試試哦翼悴,沒(méi)準(zhǔn)哪天就有小姐姐找上門了呢~??

我是kimol君,咋們下次再會(huì)~

需要python自學(xué)資料的可以私信我哦



轉(zhuǎn)載:不正經(jīng)的kimol君

來(lái)源:csdn

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末幔妨,一起剝皮案震驚了整個(gè)濱河市鹦赎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌误堡,老刑警劉巖古话,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異锁施,居然都是意外死亡陪踩,警方通過(guò)查閱死者的電腦和手機(jī)杖们,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)肩狂,“玉大人摘完,你說(shuō)我怎么就攤上這事∩邓” “怎么了孝治?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)审磁。 經(jīng)常有香客問(wèn)我谈飒,道長(zhǎng),這世上最難降的妖魔是什么力图? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任步绸,我火速辦了婚禮,結(jié)果婚禮上吃媒,老公的妹妹穿的比我還像新娘瓤介。我一直安慰自己,他們只是感情好赘那,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布刑桑。 她就那樣靜靜地躺著,像睡著了一般募舟。 火紅的嫁衣襯著肌膚如雪祠斧。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,785評(píng)論 1 314
  • 那天拱礁,我揣著相機(jī)與錄音琢锋,去河邊找鬼。 笑死呢灶,一個(gè)胖子當(dāng)著我的面吹牛吴超,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鸯乃,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鲸阻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了缨睡?” 一聲冷哼從身側(cè)響起鸟悴,我...
    開(kāi)封第一講書(shū)人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奖年,沒(méi)想到半個(gè)月后细诸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陋守,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年震贵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鹏浅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屏歹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出之碗,到底是詐尸還是另有隱情蝙眶,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布褪那,位于F島的核電站幽纷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏博敬。R本人自食惡果不足惜友浸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偏窝。 院中可真熱鬧收恢,春花似錦、人聲如沸祭往。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)硼补。三九已至驮肉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間已骇,已是汗流浹背离钝。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褪储,地道東北人卵渴。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像乱豆,于是被迫代替她去往敵國(guó)和親奖恰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

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