使用Python實(shí)現(xiàn)下載并保存網(wǎng)絡(luò)圖片
引言
今天我們來(lái)學(xué)習(xí)一個(gè)簡(jiǎn)單有趣的 Python 項(xiàng)目:從網(wǎng)上下載圖片并保存到電腦!你不需要有編程經(jīng)驗(yàn),這篇文章將以最簡(jiǎn)單的方式一步步教你完成。
項(xiàng)目目標(biāo)
下載一張網(wǎng)絡(luò)圖片
在電腦上顯示圖片
保存圖片到本地文件
準(zhǔn)備工作
我們需要用到兩個(gè) Python 庫(kù):
Pillow (PIL):用于處理圖片。
Requests:用于從網(wǎng)上獲取數(shù)據(jù)。
如果你還沒有安裝它們,可以在終端運(yùn)行以下命令:
pip install pillow requests
代碼分解和講解
我們將代碼分成幾個(gè)簡(jiǎn)單的部分。
1. 從網(wǎng)絡(luò)加載圖片
這個(gè)函數(shù)負(fù)責(zé)從指定的 URL 加載圖片,并返回一個(gè)圖片對(duì)象。
from PIL import Image
import requests
from typing import Optional
def load_image_from_url(url: str) -> Optional[Image.Image]:
"""
從指定的URL加載圖片并返回圖片對(duì)象。
參數(shù):
url (str): 圖片的URL地址。
返回:
Optional[Image.Image]: 如果加載成功,返回圖片對(duì)象;否則返回 None。
"""
try:
# 從URL獲取圖片數(shù)據(jù)
with requests.get(url, stream=True) as response:
response.raise_for_status() # 檢查請(qǐng)求是否成功
return Image.open(response.raw)
except requests.exceptions.RequestException as e:
print(f"網(wǎng)絡(luò)請(qǐng)求出錯(cuò): {e}")
except IOError as e:
print(f"圖片處理出錯(cuò): {e}")
return None
關(guān)鍵點(diǎn):
我們用 requests.get 獲取圖片數(shù)據(jù),并用 with 自動(dòng)管理資源。
如果有網(wǎng)絡(luò)問(wèn)題,raise_for_status() 會(huì)拋出錯(cuò)誤,幫助我們發(fā)現(xiàn)問(wèn)題。
Image.open 將圖片數(shù)據(jù)轉(zhuǎn)換為可以處理的圖片對(duì)象。
2. 保存圖片到本地
這個(gè)函數(shù)將圖片保存到你指定的路徑。
def save_image(image: Image.Image, file_path: str) -> None:
"""
保存圖片到指定路徑。
參數(shù):
image (Image.Image): 要保存的圖片對(duì)象。
file_path (str): 保存路徑。
"""
try:
image.save(file_path)
print(f"圖片已保存為 {file_path}")
except IOError as e:
print(f"圖片保存出錯(cuò): {e}")
關(guān)鍵點(diǎn):
如果保存時(shí)出現(xiàn)問(wèn)題,比如路徑錯(cuò)誤,IOError 會(huì)提示你。
3. 主程序邏輯
這是整個(gè)程序的入口。
if __name__ == "__main__":
# 定義圖片的URL和保存路徑
url = "https://images.pexels.com/photos/531294/pexels-photo-531294.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2"
local_file_path = "downloaded_image.jpg"
# 加載圖片
image = load_image_from_url(url)
if image:
# 顯示圖片
image.show()
# 保存圖片
save_image(image, local_file_path)
運(yùn)行結(jié)果
程序會(huì)下載并顯示圖片。
圖片會(huì)被保存到你指定的位置,比如當(dāng)前文件夾下的 downloaded_image.jpg。
總結(jié)
這段代碼展示了如何用 Python 完成一個(gè)小項(xiàng)目。它既簡(jiǎn)單又實(shí)用,是初學(xué)者學(xué)習(xí)編程的好例子。
到此這篇關(guān)于使用Python實(shí)現(xiàn)下載并保存網(wǎng)絡(luò)圖片的文章就介紹到這了,更多相關(guān)Python下載保存網(wǎng)絡(luò)圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
opencv3/C++ 平面對(duì)象識(shí)別&透視變換方式
今天小編就為大家分享一篇opencv3/C++ 平面對(duì)象識(shí)別&透視變換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
Pandas實(shí)現(xiàn)dataframe和np.array的相互轉(zhuǎn)換
今天小編就為大家分享一篇Pandas實(shí)現(xiàn)dataframe和np.array的相互轉(zhuǎn)換,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)通過(guò)公共鍵對(duì)字典列表排序算法示例
這篇文章主要介紹了Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)通過(guò)公共鍵對(duì)字典列表排序算法,結(jié)合實(shí)例形式分析了Python基于operator模塊中的itemgetter()函數(shù)對(duì)字典進(jìn)行排序的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
python使用paramiko實(shí)現(xiàn)遠(yuǎn)程拷貝文件的方法
這篇文章主要介紹了python使用paramiko實(shí)現(xiàn)遠(yuǎn)程拷貝文件的方法,分析了paramiko庫(kù)的安裝以及遠(yuǎn)程下載文件的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-04-04
Pytorch在NLP中的簡(jiǎn)單應(yīng)用詳解
今天小編就為大家分享一篇Pytorch在NLP中的簡(jiǎn)單應(yīng)用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Pytest生成測(cè)試報(bào)告的實(shí)現(xiàn)
本文介紹了如何使用 pytest-html 插件生成測(cè)試報(bào)告,并提供了詳細(xì)的操作步驟、配置項(xiàng)和示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
Python使用argcomplete模塊實(shí)現(xiàn)自動(dòng)補(bǔ)全
argcomplete?是一個(gè)強(qiáng)大的Python庫(kù),可以大幅改善命令行應(yīng)用程序的用戶體驗(yàn),本文主要介紹了argcomplete模塊的相關(guān)用法,感興趣的小伙伴可以了解下2023-11-11

