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

使用Python PIL将1920x1080图像上移像素的报错解决需求

解决图像沿Y轴向上平移并填充黑色的问题

问题原因

你写的代码里,当y+100超过图像原始高度(1080)时会触发索引越界错误——比如y取1000时,y+100=1100,已经超出图像y轴的合法范围(0到1079),自然无法访问对应像素。

方法一:用PIL现成方法实现(最简便)

1.1 仿射变换法

直接通过PIL的仿射变换快速完成平移,自动填充黑色:

from PIL import Image

img = Image.open("你的图像路径")
width, height = img.size

# 仿射变换矩阵:仅Y轴向上平移100像素,X轴无变化
shifted_img = img.transform(
    (width, height),
    Image.AFFINE,
    (1, 0, 0, 0, 1, -100),
    fillcolor="black"
)

shifted_img.show()
shifted_img.save("平移后的图像.jpg")

1.2 图像粘贴法

先创建黑色背景图,再把原图像的有效区域粘贴到对应位置,逻辑更直观:

from PIL import Image

img = Image.open("你的图像路径")
width, height = img.size

# 创建和原图尺寸一致的黑色背景图
new_img = Image.new("RGB", (width, height), color="black")
# 截取原图像中需要保留的部分(去掉底部100像素)
cropped_part = img.crop((0, 100, width, height))
# 将截取部分粘贴到新图像顶部
new_img.paste(cropped_part, (0, 0))

new_img.show()
new_img.save("平移后的图像.jpg")

方法二:修复你的循环代码

如果想保留自己的循环逻辑,调整循环范围避免越界,再手动填充底部黑色:

from PIL import Image

img = Image.open("你的图像路径")
pix = img.load()
width, height = img.size
shift_y = 100

# 仅处理不会触发越界的区域:y范围是0到height-shift_y-1
for x in range(width):
    for y in range(height - shift_y):
        pix[x, y] = pix[x, y + shift_y]

# 填充底部100行为黑色
for x in range(width):
    for y in range(height - shift_y, height):
        pix[x, y] = (0, 0, 0)

img.show()
img.save("平移后的图像.jpg")

注:原代码的range(1,1919)和range(1,1079)会漏掉边缘像素,用width和height适配性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:30:10