【问题标题】:Line won't draw on an image using ImageDraw使用 ImageDraw 不会在图像上绘制线条
【发布时间】:2019-07-10 17:14:25
【问题描述】:

我正在尝试使用 PIL 打开图像,然后在其上画一条线,但它不起作用。我正在尝试进行调平显示,线条是用户升级的程度。

我尝试使用Image.new 创建一个新图像,并且已经有一个可用的基础并使用Image.open 打开它,我还尝试将坐标直接放入函数中,然后将两个-元组作为变量并将这些变量调用到函数中(如下所示)。基础图片是透明图片。

    length = 300 # Used as a placeholder integer, as this would change depending on user's level
    base = Image.open('./level_up/base.png')
    draw = ImageDraw.Draw(base)
    pos1 = (280, 324)
    pos2 = (280, length + 324)
    draw.line((pos1, pos2), fill=(255, 102, 168), width=20)
    base.save('./level_up/base2.png')

我打开图片,这是一个空白的透明图片,即1500 x 296,里面什么都没有。没有线什么的。

【问题讨论】:

  • 尝试将base = Image.open('./level_up/base.png')更改为base = Image.open('./level_up/base.png').convert('RGB')
  • 这将显示线条,但也会破坏性地修改图像中的所有透明区域。
  • 请分享您的输入图像,以便我们了解发生了什么。谢谢。
  • @jsbueno 我假设输入图像没有透明度,因为 OP 仅使用 RGB 绘制线条而没有 A 组件。虽然我可能错了,所以我要求 OP 分享图片:-)

标签: python python-3.x image python-imaging-library draw


【解决方案1】:

当您使用包含透明度的图像(PIL 中的“RGBA”模式)时,您必须明确传递不透明度作为颜色的第四个分量。 只需在调用线中添加“255”,即填充颜色为 100% 不透明度,它应该可以工作:

draw.line((pos1, pos2), fill=(255, 102, 168, 255), width=20)

【讨论】:

  • 还是不行,图片输出还是空白的透明1500 x 296图片,上面没有任何标记。
  • 没关系,我想通了,我应该反转 pos1pos2 两个元组的坐标,因为 Y 坐标不在屏幕上。一旦我扭转了它们,它终于出现了,但无论如何谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
相关资源
最近更新 更多