溫馨提示×

溫馨提示×

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

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

怎么使用Python批量縮放圖片尺寸

發(fā)布時間:2023-05-08 11:23:00 來源:億速云 閱讀:127 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“怎么使用Python批量縮放圖片尺寸”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

方法一

在 Pillow 中,resize() 方法會強制將圖片縮放到指定的大小,可能會導致圖片變形或失真;而 thumbnail() 方法則會按比例縮小圖片,同時保持原始寬高比,不會變形或失真。

具體來說,thumbnail() 方法會根據(jù)指定的最大寬度和高度,計算出合適的縮放比例,然后將圖片按照該比例縮小,最終得到的圖片寬度和高度都不會超過指定的大小。而 resize() 方法則直接將圖片強制縮放到指定的大小,如果指定的大小與原始圖片寬高比不同,則會變形或失真。

因此,如果要保持圖片原始寬高比并縮小圖片,建議使用 thumbnail() 方法;如果需要將圖片強制縮放到指定大小,可以使用 resize() 方法,但要注意可能會導致失真或變形。

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)

在這個示例代碼中,resize_image 函數(shù)接收三個參數(shù):輸入文件路徑 input_path、輸出文件路徑 output_path,以及目標大小 size。在函數(shù)內(nèi)部,首先用 cv2.imread 函數(shù)讀取輸入文件,并使用 shape 屬性獲取圖片的寬度和高度。然后根據(jù)寬度和高度的大小關系,計算出縮放比例。最后使用 cv2.resize 函數(shù)將圖片縮放到指定大小,并使用 cv2.imwrite 函數(shù)將縮放后的圖片保存到輸出文件。

需要注意的是,使用 OpenCV 庫可能需要先安裝相關依賴,具體安裝方法可以查閱相關文檔。另外,使用 OpenCV 庫縮放圖片時,要注意保持寬高比,避免變形或失真。具體來說,可以根據(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)

在這個示例代碼中,resize_image 函數(shù)接收三個參數(shù):輸入文件路徑 input_path、輸出文件路徑 output_path,以及最大邊長 max_size。在函數(shù)內(nèi)部,首先使用 Image.open 函數(shù)讀取輸入文件,并使用 size 屬性獲取圖片的寬度和高度。然后根據(jù)最大邊長和圖片大小的關系,計算出縮放比例。最后使用 resize 函數(shù)將圖片縮放到指定大小,并使用 save 函數(shù)將縮放后的圖片保存到輸出文件。

需要注意的是,使用 Pillow 庫的 resize 方法時,也要注意保持圖片的寬高比,避免變形或失真。具體來說,可以根據(jù)圖片的寬高比,計算出縮放比例并將圖片縮小到合適的尺寸。

方法四(FFmpeg)

使用 ffmpeg 縮放視頻尺寸的命令格式如下:

ffmpeg -i input.mp4 -vf scale=: output.mp4

其中,和 分別代表縮放后的視頻寬度和高度,可以指定為具體的像素值,也可以使用百分比,如 50%。

例如,將一個輸入視頻文件 input.mp4 縮放為寬度為 640 像素,高度為 360 像素的輸出視頻文件 output.mp4,可以使用以下命令:

ffmpeg -i input.mp4 -vf scale=640:360 output.mp4

如果希望按照原始視頻寬高比自動縮放,可以只指定寬度或高度,并保留原始視頻寬高比:

# 指定寬度為 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 選項,讓 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批量縮放圖片尺寸”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

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

AI