You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义Image.alpha_composite的图片叠加起始点?

自定义位置叠加图片的解决方法

Image.alpha_composite有个硬性限制:必须要求两张图片尺寸完全一致,而且是从左上角完全重合叠加,没法直接指定偏移坐标。要实现自定义(x,y)位置的边缘重叠效果,推荐用下面两种方法:

方法一:创建画布粘贴(最灵活)

直接建一个能容纳两张图的空白画布,分别把两张图贴到指定位置,完美保留透明度:

from PIL import Image

# 打开并转成RGBA格式(确保支持透明)
img1 = Image.open("图1路径").convert("RGBA")
img2 = Image.open("图2路径").convert("RGBA")

# 自定义叠加位置(x,y),比如想让img2左上角对齐img1的(100,50)位置
x, y = 100, 50

# 计算画布尺寸:要能放下两张图的所有内容
canvas_w = max(img1.width, img2.width + x)
canvas_h = max(img1.height, img2.height + y)

# 建透明画布
canvas = Image.new("RGBA", (canvas_w, canvas_h), (0,0,0,0))

# 贴第一张图到画布(这里贴左上角,也可以改位置)
canvas.paste(img1, (0,0), mask=img1)
# 贴第二张图到自定义(x,y)位置,mask参数保留透明效果
canvas.paste(img2, (x,y), mask=img2)

# 保存结果
canvas.save("叠加结果.png")

方法二:适配alpha_composite的变通法

如果非要用Image.alpha_composite,得先把其中一张图放到和另一张同尺寸的透明画布的指定位置,再叠加:

from PIL import Image

img1 = Image.open("图1路径").convert("RGBA")
img2 = Image.open("图2路径").convert("RGBA")

x, y = 100, 50  # 自定义偏移位置

# 建一个和img1一样大的透明画布,把img2贴到(x,y)处
offset_img = Image.new("RGBA", img1.size, (0,0,0,0))
offset_img.paste(img2, (x,y), mask=img2)

# 现在可以用alpha_composite叠加了
result = Image.alpha_composite(img1, offset_img)
result.save("叠加结果.png")

注意:如果img2的尺寸加上偏移后超出img1的范围,超出部分会被裁剪,这种方法更适合小图叠加在大图上的场景。

内容的提问来源于stack exchange,提问作者Jakub Pawelak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:41:02