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

使用Python的Pillow库绘制对角线遇到问题求助

问题分析与解决

你的black_stripe函数只遍历了(x, x)坐标,这只会画出一条y=x的对角线,没有处理平行偏移的情况,所以只能得到单条线。要实现多条均匀间隔的对角线,需要通过偏移量控制每条平行对角线的位置,确保覆盖整张图片。

修改后的代码

from PIL import Image

# 间隔5像素的竖线(原代码优化版)
def black_vertical(image):
    image_path = " "  # 替换为你的图片路径
    image_name = image

    im = Image.open(image_path + image_name)
    pixarray = im.load()

    for x in range(0, im.width, 5):
        for y in range(im.height):
            pixarray[x, y] = (0, 0, 0)

    im.save(f"black_vertical_{image_name}")

# 多条均匀间隔的对角线
def black_stripe(image):
    image_path = " "  # 替换为你的图片路径
    image_name = image

    im = Image.open(image_path + image_name)
    pixarray = im.load()
    spacing = 5  # 对角线间隔,与竖线保持一致

    # 绘制左上到右下的平行对角线
    # 遍历所有偏移量,确保线条覆盖整个图片范围
    for offset in range(-im.height, im.width, spacing):
        for x in range(im.width):
            y = x + offset
            if 0 <= y < im.height:
                pixarray[x, y] = (0, 0, 0)
    
    # 如需绘制右上到左下的对角线,取消以下注释
    # for offset in range(0, im.width + im.height, spacing):
    #     for x in range(im.width):
    #         y = -x + offset
    #         if 0 <= y < im.height:
    #             pixarray[x, y] = (0, 0, 0)

    im.save(f"black_stripe_{image_name}")


def main():
    print('你将创建一张特殊效果图片')
    picture = input('请选择要处理的图片名称\n')
    # 建议分开测试两个函数,避免同一张原图被两次修改叠加
    black_vertical(picture)
    # black_stripe(picture)


if __name__ == '__main__':
    main()

关键优化说明

  1. 冗余代码清理:删除了原函数中未使用的newim和newpixarray,简化像素赋值逻辑(无需先获取原像素再修改)。
  2. 多对角线实现:
    • 通过外层循环生成偏移量offset,控制每条平行对角线的位置,间隔由spacing参数统一设置。
    • 内层循环遍历x坐标,计算对应y值并判断是否在图片范围内,避免越界报错。
    • 可选添加另一方向的对角线,只需取消对应代码块的注释。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:08:15