python 使用Pillow给图片加边框

方法一:使用 ImageOps.expand() 加单色边框(推荐)

from PIL import Image, ImageOps

img = Image.open("example.jpg")
border_img = ImageOps.expand(img, border=10, fill='black')  # 加 10 像素黑色边框
border_img.show()

✅ 最简单,适合加纯色边框(黑、白、红等)

方法二:新建更大的画布,把原图粘上去

from PIL import Image

img = Image.open("example.jpg")
border_size = 20
new_width = img.width + border_size * 2
new_height = img.height + border_size * 2

# 创建新图像作为底图(边框颜色为灰色)
new_img = Image.new("RGB", (new_width, new_height), color="gray")
new_img.paste(img, (border_size, border_size))  # 把原图贴上去

new_img.show()

✅ 更灵活,可以在上下左右设置不同的边距大小

方法三:用 ImageDraw 自己画一圈边框(适合透明图)

from PIL import Image, ImageDraw

img = Image.open("example.png").convert("RGBA")
border_size = 10

# 创建新图层并画矩形边框
new_img = Image.new("RGBA", (img.width + border_size * 2, img.height + border_size * 2), (0, 0, 0, 0))
draw = ImageDraw.Draw(new_img)
draw.rectangle([0, 0, new_img.width - 1, new_img.height - 1], fill=(0, 0, 0, 255))  # 整体黑色背景

# 粘贴原图
new_img.paste(img, (border_size, border_size), img)
new_img.show()

✅ 可以给透明 PNG 加边框、做特殊边框效果

方法四:边框使用渐变、图案、圆角等复杂样式(进阶)

numpy + Pillow 做渐变边框,或者把边框做成不规则形状(比如圆角或锯齿)——这类操作更偏图像设计,需要手动控制像素或使用模板。

1:渐变边框(由黑到透明)

图片[1]-python 使用Pillow给图片加边框-IT网络技术分享
from PIL import Image, ImageDraw, ImageFilter
import numpy as np

def add_gradient_border(img, border_size=30):
    # 创建 alpha 通道(黑到白的渐变)
    width, height = img.size
    new_w, new_h = width + 2 * border_size, height + 2 * border_size
    gradient = Image.new("L", (new_w, new_h), 0)

    for i in range(border_size):
        alpha = int(255 * (i / border_size))  # 从透明到不透明
        draw = ImageDraw.Draw(gradient)
        draw.rectangle(
            [i, i, new_w - i - 1, new_h - i - 1],
            fill=alpha
        )

    # 创建黑色背景图并应用 alpha 渐变
    border_layer = Image.new("RGBA", (new_w, new_h), (0, 0, 0, 0))
    border_layer.putalpha(gradient)

    # 粘贴原图到中间
    img = img.convert("RGBA")
    border_layer.paste(img, (border_size, border_size), img)

    return border_layer

img = Image.open("example.jpg")
bordered = add_gradient_border(img)
bordered.show()

2:图案边框(自定义花边图案贴图)

图片[2]-python 使用Pillow给图片加边框-IT网络技术分享
from PIL import Image

img = Image.open("example.jpg")
pattern = Image.open("border_pattern.png")  # 一张小图案图

# 假设我们横向拼接图案做成边框
pattern = pattern.resize((img.width + 40, 20))

# 新图:上边框 + 原图 + 下边框
new_img = Image.new("RGB", (img.width + 40, img.height + 40), "white")
new_img.paste(pattern, (0, 0))  # 上
new_img.paste(img, (20, 20))   # 中
new_img.paste(pattern, (0, img.height + 20))  # 下

new_img.show()

3:圆角边框(带柔和阴影)

图片[3]-python 使用Pillow给图片加边框-IT网络技术分享
def add_rounded_border(img, radius=30, border=10):
    width, height = img.size
    total_w = width + border * 2
    total_h = height + border * 2

    # 创建圆角遮罩(跟整个画布大小一致)
    mask = Image.new('L', (total_w, total_h), 0)
    draw = ImageDraw.Draw(mask)
    draw.rounded_rectangle(
        (0, 0, total_w, total_h),
        radius=radius,
        fill=255
    )

    # 创建背景图(灰色 + 模糊)
    background = Image.new("RGB", (total_w, total_h), "gray")
    background = background.filter(ImageFilter.GaussianBlur(2))

    # 创建一张空白图,把原图粘贴进去
    foreground = Image.new("RGB", (total_w, total_h), "white")
    foreground.paste(img, (border, border))  # 原图居中

    # 合成最终效果
    result = Image.composite(foreground, background, mask)
    return result


img = Image.open("example.jpg")
rounded = add_rounded_border(img)
rounded.show()
图片[4]-python 使用Pillow给图片加边框-IT网络技术分享
def add_rounded_border_with_shadow(img, radius=30, border=20, shadow_blur=10, shadow_color=(0, 0, 0, 100)):
    width, height = img.size
    total_w = width + border * 2
    total_h = height + border * 2

    # 创建圆角遮罩(白色部分为保留区域)
    mask = Image.new('L', (total_w, total_h), 0)
    draw = ImageDraw.Draw(mask)
    draw.rounded_rectangle(
        [border, border, total_w - border, total_h - border],
        radius=radius,
        fill=255
    )

    # 创建阴影图层(黑色图先模糊,再叠加)
    shadow = Image.new("RGBA", (total_w, total_h), (0, 0, 0, 0))
    shadow_draw = ImageDraw.Draw(shadow)
    shadow_draw.rounded_rectangle(
        [border, border, total_w - border, total_h - border],
        radius=radius,
        fill=shadow_color
    )
    shadow = shadow.filter(ImageFilter.GaussianBlur(shadow_blur))

    # 创建背景图(透明或指定背景色)
    background = Image.new("RGBA", (total_w, total_h), (255, 255, 255, 0))
    background = Image.alpha_composite(background, shadow)  # 把阴影贴到底图上

    # 创建内容图层,把原图贴进去
    foreground = Image.new("RGBA", (total_w, total_h), (255, 255, 255, 0))
    foreground.paste(img.convert("RGBA"), (border, border))

    # 使用遮罩合成圆角效果
    final = Image.composite(foreground, background, mask)
    return final


img = Image.open("example.jpg")
rounded = add_rounded_border_with_shadow(img)
rounded.show()
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容