如何用python的PIL库实现图片大小修改填充?
已有代码如下,可以实现等比例修改图片分辨率为768像素高的图片,我的目标是把图片生成512x768尺寸的图片, 例如300x768分辨率的图片,在不修改原图比例的前提下,给图片两边各加106x768的白边。请问如何填充宽度不足512的部分?
from PIL import Image
import os
input_folder = '输入地址'
output_folder = '输出地址'
# Loop through all the files in the input folder
for filename in os.listdir(input_folder):
# Check if the file is an image
if filename.endswith('.png') or filename.endswith('.jpg') or filename.endswith('.jpeg'):
# Open the image and resize it
img = Image.open(os.path.join(input_folder, filename))
(x, y) = img.size
y_s = 768 # 基于标准宽度计算缩小后的高度
x_s = int(x * y_s / y) # 定义缩小后的标准宽度
img = img.resize((x_s,y_s),Image.ANTIALIAS)
# Save the resized image to the output folder
new_filename = os.path.splitext(filename)[0] + '_resized.png'
img.save(os.path.join(output_folder, new_filename))
不知道你这个问题是否已经解决, 如果还没有解决的话:原理是转为“1”的模式,为二值图像。即:非黑即白。它每个像素用8个bit表示,0表示黑,255表示白(除了这两个值外再没有别的值)
示例代码:
from PIL import Image
# open colour image
image_raw = Image.open("./images/sunflower.jpg")
# convert image to black and white
image_black_white = image_raw.convert('1')
image_black_white.save('./images/black_white_sunflower.jpg')
image_black_white.show()
运行结果:
from PIL import Image
def fill_image(image, size):
"""
将图片填充为指定size大小
:param image: PIL.Image.Image对象
:param size: tuple 元组类型,如(512, 768)
:return: PIL.Image.Image对象
"""
# 原图片尺寸
width, height = image.size
# 按照宽高比例进行缩放,取较大的比例值
ratio = max(size[0]/width, size[1]/height)
new_width = int(width*ratio)
new_height = int(height*ratio)
resize_image = image.resize((new_width, new_height), Image.ANTIALIAS)
# 创建新画布,将新图片放置中心
new_image = Image.new("RGB", size, (255, 255, 255))
new_image.paste(resize_image, ((size[0]-new_width)//2, (size[1]-new_height)//2))
return new_image
if __name__ == '__main__':
# 读取原图片
img = Image.open("test.jpg")
# 填充图片
new_image = fill_image(img, (512, 768))
# 保存新图片
new_image.save("new_image.jpg")