python保存图片到指定路径_使用Python将不同大小照片制作为GIF动画2
導(dǎo)讀:本文介紹如何使用Python將不同大小的照片制作為GIF動(dòng)畫,文末附源代碼。閱讀完本文,你將學(xué)會(huì)使用Python編寫程序,將不同大小的照片制作為心儀的GIF動(dòng)畫。
在上一篇文章里,介紹了使用Python和imageio,不改變圖片大小,把相同大小(分辨率)的多張照片制作為GIF的方法。一般來(lái)說(shuō),只有從視頻提取的幀序列的分辨率才保持一致。此時(shí)使用該方法是沒有問(wèn)題的。
一、問(wèn)題的引出
不過(guò)在大部分情況下,你面對(duì)的是不同分辨率的圖片,有豎版照片、橫版照片、高寬相同的照片,即使是豎版或橫版,其高寬比也不相同。那么,如何將不同分辨率的照片制作為GIF動(dòng)畫呢?
由于GIF動(dòng)畫要求所有幀的分辨率必須相同,因此要先把不同分辨率的圖片調(diào)整為相同的分辨率。一種簡(jiǎn)單粗暴的方法是直接將所有源圖片resize到相同大小。
下面介紹將不同大小照片制作為GIF的方法和過(guò)程。這個(gè)過(guò)程和上一篇文章所介紹的過(guò)程類似,只不過(guò)增加了使用圖像處理模塊scikit image的resize()方法來(lái)改變圖片分辨率的步驟。
二、使用的編程語(yǔ)言和庫(kù)
關(guān)于編程工具,推薦使用Anaconda Python. 它集成了許多常用的庫(kù),當(dāng)然包括圖像處理模塊scikit-image、制作GIF用的imageio模塊。用戶不必另行安裝,非常方便初學(xué)者使用。如果你還沒使用過(guò)Anaconda Python,請(qǐng)到本號(hào)的免費(fèi)專欄Anaconda Python的安裝和使用,了解它的下載、安裝、使用方法。
三、準(zhǔn)備工作
首先準(zhǔn)備2張以上的照片。照片的大小可以不同。為驗(yàn)證本文介紹的方法和代碼,建議準(zhǔn)備至少一張豎版、一張橫版照片。所有的照片要為相同的格式。這里我們使用jpg格式。將照片放到一個(gè)文件夾里,按照你希望的播放順序?qū)⒏鲝堈掌瓷蛎A硗庠俳⒁粋€(gè)文件夾,用來(lái)保存制作好的GIF文件。當(dāng)然也可以在程序中動(dòng)態(tài)創(chuàng)建文件夾,以后再撰文說(shuō)明如何來(lái)創(chuàng)建。做好這些準(zhǔn)備,就可以編寫程序,逐個(gè)讀取照片制作GIF。
四、GIF制作思路
首先導(dǎo)入os模塊,用于獲取指定文件夾下所有文件的名字;從scikit-image模塊(skimage)的transform子模塊導(dǎo)入resize()方法,用于改變圖片的分辨率;導(dǎo)入imageio模塊,用于讀取圖片和制作GIF。
其實(shí)關(guān)于讀取圖片和改變其分辨率,還有更好的庫(kù)可以用,例如OpenCV. 但是OpenCV需要用戶自己安裝。等以后大家對(duì)Python比較熟悉了,再介紹使用OpenCV的方法。它不但能處理照片,還可以處理視頻。比如從視頻提取幀,將照片制作為視頻,等等。
然后,使用os.listdir()方法來(lái)獲取指定路徑下所有圖片的名字列表。
第三步,創(chuàng)建一個(gè)初始化為空的列表,用于保存讀取的每張圖片。
第四步,創(chuàng)建一個(gè)循環(huán)體,遍歷圖片名字列表,拼出每張照片的全路徑名稱,使用imageio.imread()方法讀取每張照片,使用resize()方法將每張圖片改變?yōu)槟阆M姆直媛省楸阌趶氖謾C(jī)觀看,建議將圖片的高:寬比例設(shè)置為16:9. 然后使用append()方法將resize后的圖片添加到圖片列表,直至所有圖片處理并添加到圖片列表完畢。
第五步,使用mimsave()方法將圖片列表保存為GIF。mimsave()方法主要有4個(gè)參數(shù),第1個(gè)參數(shù)是要保存的GIF文件全路徑名稱,包括后綴名.gif;第2個(gè)參數(shù)是圖片列表;第3個(gè)參數(shù)是保存類型,設(shè)置為字符串'GIF';第4個(gè)參數(shù)為每張圖片播放持續(xù)時(shí)間,單位為秒。
五、示例源代碼
將不同大小jpg格式的照片制作為GIF動(dòng)畫的示例源代碼如下。
import os,imageiofrom skimage.transform import resizepath_source='.../images/' #源照片位置path_dest='.../gif/' #GIF要保存的位置source_file_list = os.listdir(path_source) #讀取文件夾下所有文件名稱frames = [] #保存幀的列表for file in source_file_list: full_name=path_source+file #照片的全路徑名稱 frame=imageio.imread(full_name) #讀取照片 frame=resize(frame, (800,450,4)) #高寬比16:9 frames.append(frame) #將照片添加到列表 #duration:單幀持續(xù)時(shí)間,單位simageio.mimsave(path_dest+'mygif2.gif', frames, 'GIF', duration=0.8)這個(gè)程序代碼比上一篇文章制作GIF動(dòng)畫的代碼也就多了導(dǎo)入resize方法和使用resize()改變圖片分辨率這兩行語(yǔ)句,總共12行。制作的GIF效果如下圖所示。
可以看出,照片的比例失真了。這是由于對(duì)原始照片,只是簡(jiǎn)單的使用resize()方法將其改為為指定的分辨率,改變后的分辨率與原照片不一致,因此看起來(lái)高寬比例失真。
照片比例失真將影響觀賞效果,那么該如何做到既能夠?qū)⒉煌笮〉恼掌淖優(yōu)榫哂邢嗤直媛?#xff0c;又能夠保證原照片的比例不失真呢?這個(gè)解決方法將在下一篇文章中進(jìn)行介紹。請(qǐng)繼續(xù)關(guān)注本號(hào)的后續(xù)文章。歡迎轉(zhuǎn)發(fā)評(píng)論,有任何問(wèn)題請(qǐng)?jiān)谠u(píng)論區(qū)留言。
總結(jié)
以上是生活随笔為你收集整理的python保存图片到指定路径_使用Python将不同大小照片制作为GIF动画2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 聚类算法 距离矩阵_谱聚类
- 下一篇: 专科学python真的不好_专科生转行做