大家好,在當今的數(shù)字化時代,產品圖片在電子商務和市場營銷中發(fā)揮著至關重要的作用。然而,為在線平臺準備產品圖片可能是一項耗時的任務,本文將分享一個Python腳本,用于自動化產品圖片的圖像處理工作流程。通過使用Python Imaging Library(PIL)
和rembg
庫,可以實現(xiàn)刪除圖片背景,裁剪圖片以適應產品尺寸,調整圖片大小,并創(chuàng)建具有特定大小和顏色的新畫布。
腳本概述
今天本文要討論的腳本遵循以下步驟:
-
使用
rembg
庫刪除圖片背景。 -
裁剪圖片,僅包含產品尺寸。
-
調整裁剪后的圖片到指定的大小,同時保持寬高比。
-
創(chuàng)建具有指定大小和顏色的新畫布。
-
將調整大小后的產品圖片粘貼到新畫布上。
安裝和使用
要運行腳本,需要安裝PIL(Pillow)
庫和rembg
庫。你可以使用pip
安裝它們:
pip install pillow rembg
要使用該腳本,請按照以下步驟操作:
-
將你的產品圖片放置在指定的文件夾和子文件夾中。
-
在腳本中更新
folder_dir
變量,以使其指向包含你的產品圖片的文件夾。 -
使用Python解釋器運行腳本。
腳本將處理文件夾及其子文件夾中的所有產品圖片,應用前面提到的圖像處理步驟。處理后的圖像將進行保存,并在原始文件名后附加“_Processed
”后綴。
函數(shù)解釋
append_id(filename)
def append_id(filename):
p = Path(filename)
return "{0}_{2}{1}".format(Path.joinpath(p.parent, p.stem), ".png", "Processed")
此函數(shù)會在輸出圖像文件名附加一個ID。它以原始文件名作為輸入,并返回附加了“_Processed
”后綴的修改后的文件名。這有助于區(qū)分處理后的圖像和原始圖像。
autocrop_image(img, border=0)
def autocrop_image(img, border=0):
bbox = img.getbbox()
img = img.crop(bbox)
(scale, height) = img.size
scale += border * 2
height += border * 2
cropped_image = Image.new("RGBA", (scale, height), (0, 0, 0, 0))
cropped_image.paste(img, (border, border))
return cropped_image
此函數(shù)通過刪除任何不必要的空白或背景來自動裁剪圖像,它接受一個輸入圖像img
和一個可選border
參數(shù)(默認為0),該參數(shù)用于在裁剪后的圖像周圍添加額外的填充。其使用img.getbbox()
計算圖像的邊界框,將圖像裁剪為邊界框的內容,然后創(chuàng)建一個適當大小的新圖像以容納裁剪后的圖像和邊框,最后將裁剪后的圖像粘貼到新圖像上,并返回裁剪后的圖像結果。
resize_image(img, myScale)
def resize_image(img, myScale):
img_width, img_height = img.size
if img_height > img_width:
hpercent = (myScale/float(img_height))
wsize = int((float(img_width)*float(hpercent)))
resized_img = img.resize((wsize, myScale), Image.Resampling.LANCZOS)
if img_width > img_height:
wpercent = (myScale/float(img_width))
hsize = int((float(img_height)*float(wpercent)))
resized_img = img.resize((myScale, hsize), Image.Resampling.LANCZOS)
return resized_img
此函數(shù)可在保持寬高比的同時縮放圖像,接受輸入圖像img
和所需縮放比例myScale
。首先函數(shù)根據(jù)比較圖像的高度和寬度來確定圖像是縱向還是橫向,然后使用所需的比例計算出相應的調整大小的尺寸,最后使用img.resize()
根據(jù)計算出的尺寸調整圖像大小,并返回調整大小后的圖像。
resize_canvas(img, canvas_width, canvas_height)
def resize_canvas(img, canvas_width, canvas_height):
old_width, old_height = img.size
x1 = int(math.floor((canvas_width - old_width) / 2))
y1 = int(math.floor((canvas_height - old_height) / 2))
mode = img.mode
if len(mode) == 1:
new_background = (255)
if len(mode) == 3:
new_background = (255, 255, 255)
if len(mode) == 4:
new_background = (255, 255, 255, 255)
newImage = Image.new(mode, (canvas_width, canvas_height), new_background)
newImage.alpha_composite(
img, ((canvas_width - old_width) // 2, (canvas_height - old_height) // 2))
return newImage
此函數(shù)可調整畫布大小并將圖像放置于其中,它接受輸入圖像img
、畫布寬度canvas_width
和畫布高度canvas_height
。該函數(shù)根據(jù)畫布尺寸與圖像尺寸之間的差異,計算出將圖像居中放置于畫布上所需的位置,然后創(chuàng)建一個具有指定畫布尺寸和根據(jù)圖像模式確定的適當背景色的新圖像。最后在計算出的位置將輸入圖像粘貼到新圖像上,并返回調整畫布尺寸后的圖像。
process_files(folder_dir)
def process_files(folder_dir):
for entry in os.scandir(folder_dir):
if entry.is_file() and entry.name.lower().endswith(image_extensions):
image_path = entry.path
img = Image.open(image_path)
output_path = append_id(image_path)
removedBGimage = remove(img, True)
croppedImage = autocrop_image(removedBGimage, 0)
resizedImage = resize_image(croppedImage, 700)
combinedImage = resize_canvas(resizedImage, 1000, 1000)
combinedImage.save(output_path)
elif entry.is_dir():
process_files(entry.path)
此函數(shù)可處理指定文件夾及其子文件夾中的文件,以folder_dir
作為輸入,函數(shù)使用os.scandir()
迭代遍歷文件夾中的每個條目。如果條目是一個文件并且具有受支持的圖像擴展名,它使用Image.open()
打開該圖像,然后通過調用append_id()
函數(shù)生成輸出路徑,使用rembg
庫中的remove()
函數(shù)刪除圖像背景,自動裁剪圖像,調整圖像大小,創(chuàng)建新畫布,并將處理后的圖像保存到輸出路徑。如果條目是一個目錄,則它遞歸調用process_files()
函數(shù)以處理子目錄中的文件。文章來源:http://www.zghlxwxcb.cn/news/detail-603012.html
本文探討了一個Python腳本,用于自動化產品圖片的圖像處理。通過充分利用PIL
和rembg
的功能,可以刪除圖像背景、裁剪圖像、調整圖像大小并創(chuàng)建新畫布,以獲得精美和專業(yè)的外觀。通過自動化這一工作流程,可以節(jié)省準備產品圖片用于各種電子商務和市場營銷平臺的時間和精力。文章來源地址http://www.zghlxwxcb.cn/news/detail-603012.html
到了這里,關于使用Python實現(xiàn)產品圖片自動化處理的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!