关于#python#的问题:如何用python的PIL库实现图片大小修改填充

如何用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))

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/190492
  • 这篇博客你也可以参考下:【Python】圆周率 Pi (π) 的计算(蒙特卡罗法+公式法)
  • 除此之外, 这篇博客: 使用python将图片改为灰度图或黑白图中的 2. 利用PIL库将图片改为黑白图 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

            原理是转为“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()
    

     运行结果:

  • 以下回答来自chatgpt:
    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")
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^