在當今的數位時代,以程式方式管理和處理影像可以節省您大量的時間和精力。如果您希望自動化從網路下載圖像的過程,那麼您來對地方了。在本文中,我們將深入研究一個 Python 腳本,該腳本使用 Pexels API(高品質庫存照片的流行來源)來執行此操作。
概述
此處提供的 Python 腳本可讓您根據查詢在 Pexels 上搜尋映像,如果滿足特定條件則下載它們,並將它們儲存到本機系統。該腳本使用了多個強大的程式庫和 API,包括 requests、Pillow 和 Pexels API。
腳本的主要特點
API 整合:使用 API 從 Pexels 取得影像。
動態濾鏡:根據尺寸和方向選擇影像。
日期模擬:雖然 Pexels API 不直接支援基於日期的過濾,但腳本透過產生隨機日期來模擬這一點。
速率限制:避免因隨機延遲而達到 API 速率限制。
理解程式碼
導入與設定
import os import requests from PIL import Image from io import BytesIO import random import time from datetime import datetime, timedelta
腳本先導入必要的函式庫。這是一個快速概述:
API_KEY = '...' # Replace with your actual Pexels API key BASE_URL = 'https://api.pexels.com/v1/search' OUTPUT_DIR = 'output' SEARCH_QUERY = 'Subaru Forester' MIN_WIDTH = 1080 MIN_HEIGHT = 1920 NUM_IMAGES = 16 ORIENTATION = 'vertical'
設定您的 API 金鑰、Pexels 的基本 URL,並指定其他參數,例如搜尋查詢、最小圖片尺寸、要下載的圖片數量和圖片方向。
確保輸出目錄存在
if not os.path.exists(OUTPUT_DIR): os.makedirs(OUTPUT_DIR)
腳本檢查輸出目錄是否存在並在必要時建立它。
取得影像
def get_images(query, page=1, per_page=15): params = { 'query': query, 'page': page, 'per_page': per_page } response = requests.get(BASE_URL, headers=headers, params=params) response.raise_for_status() return response.json()
此函數向 Pexels API 發送請求,以根據搜尋查詢和其他參數取得影像。
下載並儲存圖片
def download_and_save_image(url, filename): response = requests.get(url) response.raise_for_status() img = Image.open(BytesIO(response.content)) if img.width >= MIN_WIDTH and img.height >= MIN_HEIGHT: if ORIENTATION == 'vertical' and (img.height / img.width > 1.4): img.save(filename) print(f'Saved {filename}') return 1 elif ORIENTATION == 'horizontal' and (img.width / img.height > 1.4): img.save(filename) print(f'Saved {filename}') return 1 return 0
此函數處理從 URL 下載圖像,檢查其尺寸和方向,如果符合條件則保存它。
產生隨機日期
def generate_random_date(): end_date = datetime.now() start_date = end_date - timedelta(days=4*365) random_date = start_date + timedelta(days=random.randint(0, 4*365)) return random_date
此函數會產生過去四年內的隨機日期。雖然 Pexels API 不直接提供基於日期的過濾,但此隨機日期模擬了這樣的過濾器。
主要功能
def main(): images_downloaded = 0 page = 1 seen_images = set() target_date = generate_random_date() print(f"Target date for filtering: {target_date.strftime('%Y-%m-%d')}") while images_downloaded < NUM_IMAGES: data = get_images(SEARCH_QUERY, page) photos = data.get('photos', []) if not photos: print('No more photos found.') break random.shuffle(photos) # Shuffle to get a more random selection for photo in photos: if images_downloaded >= NUM_IMAGES: break image_url = photo['src']['original'] photo_date = datetime.strptime(photo['created_at'], '%Y-%m-%dT%H:%M:%S%z') if 'created_at' in photo else datetime.now() if photo_date > target_date and image_url not in seen_images: filename = os.path.join(OUTPUT_DIR, f'image_{images_downloaded + 1}.jpg') if download_and_save_image(image_url, filename): images_downloaded += 1 seen_images.add(image_url) page += 1 time.sleep(random.uniform(1, 2)) # Sleep to avoid hitting API rate limits
main() 函數協調影像擷取、下載和儲存過程。它管理分頁、檢查重複影像並強制延遲以遵守 API 的速率限制。
運行腳本
若要執行此腳本,請確保您已將 API_KEY 替換為實際的 Pexels API 金鑰,並根據需要調整其他參數。將腳本保存在 .py 檔案中並使用 Python 解釋器執行它。符合指定條件的影像將保存在輸出目錄中。
結論
自動圖像下載可以簡化您的工作流程並確保您擁有高品質的圖像。該 Python 腳本為此類任務提供了堅實的基礎,並且可以根據您的需求靈活地進行自訂。無論您是在處理個人專案還是將映像下載整合到更大的應用程式中,此腳本都展示了 Python 在處理基於 Web 的任務方面的強大功能和多功能性。
以上是如何使用 Python 自動下載圖片:綜合指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!