溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

基于Python如何實(shí)現(xiàn)批量縮放圖片尺寸

發(fā)布時(shí)間:2023-03-24 10:54:15 來源:億速云 閱讀:99 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下基于Python如何實(shí)現(xiàn)批量縮放圖片尺寸的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

方法一

在 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 # 最大邊長為 640
resize_image(input_path, output_path, max_size)

在這個(gè)示例代碼中,resize_image 函數(shù)接收三個(gè)參數(shù):輸入文件路徑 input_path、輸出文件路徑 output_path,以及最大邊長 max_size。在函數(shù)內(nèi)部,首先使用 Image.open 函數(shù)讀取輸入文件,并使用 size 屬性獲取圖片的寬度和高度。然后根據(jù)最大邊長和圖片大小的關(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

以上就是“基于Python如何實(shí)現(xiàn)批量縮放圖片尺寸”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI