基于Python實(shí)現(xiàn)批量縮放圖片(視頻)尺寸
方法一
在 Pillow 中,resize() 方法會(huì)強(qiáng)制將圖片縮放到指定的大小,可能會(huì)導(dǎo)致圖片變形或失真;而 thumbnail() 方法則會(huì)按比例縮小圖片,同時(shí)保持原始寬高比,不會(huì)變形或失真。
具體來說,thumbnail() 方法會(huì)根據(jù)指定的最大寬度和高度,計(jì)算出合適的縮放比例,然后將圖片按照該比例縮小,最終得到的圖片寬度和高度都不會(huì)超過指定的大小。而 resize() 方法則直接將圖片強(qiáng)制縮放到指定的大小,如果指定的大小與原始圖片寬高比不同,則會(huì)變形或失真。
因此,如果要保持圖片原始寬高比并縮小圖片,建議使用 thumbnail() 方法;如果需要將圖片強(qiáng)制縮放到指定大小,可以使用 resize() 方法,但要注意可能會(huì)導(dǎo)致失真或變形。
from PIL import Image import os dir = r'C:\Users\1\Desktop\ffmpeg\bin\final_results' out = r'C:\Users\1\Desktop\ffmpeg\bin\results' def resize_image(): for path in os.listdir(dir): img = os.path.join(dir, path) print(f'縮放圖:【{img}】') with Image.open(img) as img: img.thumbnail((1280, 720)) img.save(os.path.join(out, path)) # 調(diào)用示例 resize_image()
方法二
import cv2 def resize_image(input_path, output_path, size): img = cv2.imread(input_path) height, width, _ = img.shape if width > height: scale = size / width else: scale = size / height img = cv2.resize(img, (int(width * scale), int(height * scale))) cv2.imwrite(output_path, img) # 調(diào)用示例 input_path = 'input.jpg' output_path = 'output.jpg' size = 640 # 寬度或高度為 640 resize_image(input_path, output_path, size)
在這個(gè)示例代碼中,resize_image 函數(shù)接收三個(gè)參數(shù):輸入文件路徑 input_path、輸出文件路徑 output_path,以及目標(biāo)大小 size。在函數(shù)內(nèi)部,首先用 cv2.imread 函數(shù)讀取輸入文件,并使用 shape 屬性獲取圖片的寬度和高度。然后根據(jù)寬度和高度的大小關(guān)系,計(jì)算出縮放比例。最后使用 cv2.resize 函數(shù)將圖片縮放到指定大小,并使用 cv2.imwrite 函數(shù)將縮放后的圖片保存到輸出文件。
需要注意的是,使用 OpenCV 庫可能需要先安裝相關(guān)依賴,具體安裝方法可以查閱相關(guān)文檔。另外,使用 OpenCV 庫縮放圖片時(shí),要注意保持寬高比,避免變形或失真。具體來說,可以根據(jù)圖片的寬高比,計(jì)算出縮放比例并將圖片縮小到合適的尺寸。
方法三
from PIL import Image def resize_image(input_path, output_path, max_size): img = Image.open(input_path) width, height = img.size if max(width, height) > max_size: if width > height: new_width = max_size new_height = int(height * (max_size / width)) else: new_width = int(width * (max_size / height)) new_height = max_size img = img.resize((new_width, new_height)) img.save(output_path) # 調(diào)用示例 input_path = 'input.jpg' output_path = 'output.jpg' max_size = 640 # 最大邊長(zhǎng)為 640 resize_image(input_path, output_path, max_size)
在這個(gè)示例代碼中,resize_image 函數(shù)接收三個(gè)參數(shù):輸入文件路徑 input_path、輸出文件路徑 output_path,以及最大邊長(zhǎng) max_size。在函數(shù)內(nèi)部,首先使用 Image.open 函數(shù)讀取輸入文件,并使用 size 屬性獲取圖片的寬度和高度。然后根據(jù)最大邊長(zhǎng)和圖片大小的關(guān)系,計(jì)算出縮放比例。最后使用 resize 函數(shù)將圖片縮放到指定大小,并使用 save 函數(shù)將縮放后的圖片保存到輸出文件。
需要注意的是,使用 Pillow 庫的 resize 方法時(shí),也要注意保持圖片的寬高比,避免變形或失真。具體來說,可以根據(jù)圖片的寬高比,計(jì)算出縮放比例并將圖片縮小到合適的尺寸。
方法四(FFmpeg)
使用 ffmpeg 縮放視頻尺寸的命令格式如下:
ffmpeg -i input.mp4 -vf scale=: output.mp4
其中,和 分別代表縮放后的視頻寬度和高度,可以指定為具體的像素值,也可以使用百分比,如 50%。
例如,將一個(gè)輸入視頻文件 input.mp4 縮放為寬度為 640 像素,高度為 360 像素的輸出視頻文件 output.mp4,可以使用以下命令:
ffmpeg -i input.mp4 -vf scale=640:360 output.mp4
如果希望按照原始視頻寬高比自動(dòng)縮放,可以只指定寬度或高度,并保留原始視頻寬高比:
# 指定寬度為 640 像素,高度按原始比例縮放 ffmpeg -i input.mp4 -vf scale=640:-1 output.mp4 # 指定高度為 360 像素,寬度按原始比例縮放 ffmpeg -i input.mp4 -vf scale=-1:360 output.mp4
還可以通過在 scale 參數(shù)前添加 force_original_aspect_ratio 選項(xiàng),讓 ffmpeg 在縮放過程中保留原始視頻寬高比,以免變形:
ffmpeg -i input.mp4 -vf "scale=640:360:force_original_aspect_ratio=decrease,pad=640:360:(ow-iw)/2:(oh-ih)/2" output.mp4
到此這篇關(guān)于基于Python實(shí)現(xiàn)批量縮放圖片(視頻)尺寸的文章就介紹到這了,更多相關(guān)Python縮放圖片尺寸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python數(shù)據(jù)處理實(shí)戰(zhàn)(必看篇)
下面小編就為大家?guī)硪黄猵ython數(shù)據(jù)處理實(shí)戰(zhàn)(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06Python面向?qū)ο箢惥帉懠?xì)節(jié)分析【類,方法,繼承,超類,接口等】
這篇文章主要介紹了Python面向?qū)ο箢惥帉懠?xì)節(jié),較為詳細(xì)的分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類,方法,繼承,超類,接口等相關(guān)概念、使用技巧與注意事項(xiàng),需要的朋友可以參考下2019-01-01matplotlib階梯圖的實(shí)現(xiàn)(step())
這篇文章主要介紹了matplotlib階梯圖的實(shí)現(xiàn)(step()),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03?Python使用Mediapipe對(duì)圖像進(jìn)行手部地標(biāo)檢測(cè)
本文將以深度庫即Mediapipe為基礎(chǔ)庫,以及其他計(jì)算機(jī)視覺預(yù)處理的CV2庫來制作手部地標(biāo)檢測(cè)模型,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-03-03python -m pip install 和 pip in
python -m pip install <package> 使用了 -m 參數(shù)來確保以 Python 模塊的形式運(yùn)行 pip,適用于確保在不同的環(huán)境中正確使用 pip,這篇文章主要介紹了python -m pip install 和 pip install 的區(qū)別,需要的朋友可以參考下2023-07-07Python中pytest的參數(shù)化實(shí)例解析
這篇文章主要介紹了Python中pytest的參數(shù)化實(shí)例解析,pytest是一個(gè)非常成熟的全功能的Python測(cè)試框架,主要有簡(jiǎn)單靈活,容易上手,支持參數(shù)化等特點(diǎn),需要的朋友可以參考下2023-07-07Python 3.6 性能測(cè)試框架Locust安裝及使用方法(詳解)
下面小編就為大家?guī)硪黄狿ython 3.6 性能測(cè)試框架Locust安裝及使用方法(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10