方法一:使用 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网络技术分享](https://zywi.cn/wp-content/uploads/2025/04/20250423104629472-20250423104610.png)
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网络技术分享](https://zywi.cn/wp-content/uploads/2025/04/20250423105054999-20250423105038.png)
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网络技术分享](https://zywi.cn/wp-content/uploads/2025/04/20250423105756554-20250423105738.png)
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网络技术分享](https://zywi.cn/wp-content/uploads/2025/04/20250423105845564-20250423105828.png)
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
暂无评论内容