python保存图片到指定路径_使用Python将不同大小照片制作为GIF动画2
導讀:本文介紹如何使用Python將不同大小的照片制作為GIF動畫,文末附源代碼。閱讀完本文,你將學會使用Python編寫程序,將不同大小的照片制作為心儀的GIF動畫。
在上一篇文章里,介紹了使用Python和imageio,不改變圖片大小,把相同大小(分辨率)的多張照片制作為GIF的方法。一般來說,只有從視頻提取的幀序列的分辨率才保持一致。此時使用該方法是沒有問題的。
一、問題的引出
不過在大部分情況下,你面對的是不同分辨率的圖片,有豎版照片、橫版照片、高寬相同的照片,即使是豎版或橫版,其高寬比也不相同。那么,如何將不同分辨率的照片制作為GIF動畫呢?
由于GIF動畫要求所有幀的分辨率必須相同,因此要先把不同分辨率的圖片調整為相同的分辨率。一種簡單粗暴的方法是直接將所有源圖片resize到相同大小。
下面介紹將不同大小照片制作為GIF的方法和過程。這個過程和上一篇文章所介紹的過程類似,只不過增加了使用圖像處理模塊scikit image的resize()方法來改變圖片分辨率的步驟。
二、使用的編程語言和庫
關于編程工具,推薦使用Anaconda Python. 它集成了許多常用的庫,當然包括圖像處理模塊scikit-image、制作GIF用的imageio模塊。用戶不必另行安裝,非常方便初學者使用。如果你還沒使用過Anaconda Python,請到本號的免費專欄Anaconda Python的安裝和使用,了解它的下載、安裝、使用方法。
三、準備工作
首先準備2張以上的照片。照片的大小可以不同。為驗證本文介紹的方法和代碼,建議準備至少一張豎版、一張橫版照片。所有的照片要為相同的格式。這里我們使用jpg格式。將照片放到一個文件夾里,按照你希望的播放順序將各張照片按升序命名。另外再建立一個文件夾,用來保存制作好的GIF文件。當然也可以在程序中動態創建文件夾,以后再撰文說明如何來創建。做好這些準備,就可以編寫程序,逐個讀取照片制作GIF。
四、GIF制作思路
首先導入os模塊,用于獲取指定文件夾下所有文件的名字;從scikit-image模塊(skimage)的transform子模塊導入resize()方法,用于改變圖片的分辨率;導入imageio模塊,用于讀取圖片和制作GIF。
其實關于讀取圖片和改變其分辨率,還有更好的庫可以用,例如OpenCV. 但是OpenCV需要用戶自己安裝。等以后大家對Python比較熟悉了,再介紹使用OpenCV的方法。它不但能處理照片,還可以處理視頻。比如從視頻提取幀,將照片制作為視頻,等等。
然后,使用os.listdir()方法來獲取指定路徑下所有圖片的名字列表。
第三步,創建一個初始化為空的列表,用于保存讀取的每張圖片。
第四步,創建一個循環體,遍歷圖片名字列表,拼出每張照片的全路徑名稱,使用imageio.imread()方法讀取每張照片,使用resize()方法將每張圖片改變為你希望的分辨率。為便于從手機觀看,建議將圖片的高:寬比例設置為16:9. 然后使用append()方法將resize后的圖片添加到圖片列表,直至所有圖片處理并添加到圖片列表完畢。
第五步,使用mimsave()方法將圖片列表保存為GIF。mimsave()方法主要有4個參數,第1個參數是要保存的GIF文件全路徑名稱,包括后綴名.gif;第2個參數是圖片列表;第3個參數是保存類型,設置為字符串'GIF';第4個參數為每張圖片播放持續時間,單位為秒。
五、示例源代碼
將不同大小jpg格式的照片制作為GIF動畫的示例源代碼如下。
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:單幀持續時間,單位simageio.mimsave(path_dest+'mygif2.gif', frames, 'GIF', duration=0.8)這個程序代碼比上一篇文章制作GIF動畫的代碼也就多了導入resize方法和使用resize()改變圖片分辨率這兩行語句,總共12行。制作的GIF效果如下圖所示。
可以看出,照片的比例失真了。這是由于對原始照片,只是簡單的使用resize()方法將其改為為指定的分辨率,改變后的分辨率與原照片不一致,因此看起來高寬比例失真。
照片比例失真將影響觀賞效果,那么該如何做到既能夠將不同大小的照片改變為具有相同分辨率,又能夠保證原照片的比例不失真呢?這個解決方法將在下一篇文章中進行介紹。請繼續關注本號的后續文章。歡迎轉發評論,有任何問題請在評論區留言。
總結
以上是生活随笔為你收集整理的python保存图片到指定路径_使用Python将不同大小照片制作为GIF动画2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聚类算法 距离矩阵_谱聚类
- 下一篇: vlc文件服务器局域网,vlc流媒体服务