在Python PIL中覆盖图像上的边框

时间:2018-07-26 08:57:36

标签: python django image python-imaging-library pillow

我有一个图库应用程序,用户可以在其中上传照片,我的代码给它加上边框,在边框上写一些照片属性并将其存储。

{{1}}

(请注意,由于我在底部边框上写属性,因此此处的底部边框比顶部边框长。) 现在,我正在为上传的图像构建一个编辑功能,用户可以在其中更改上传的图像的属性。但是已经写在边框上的属性必须被覆盖。

因此,在这里,我的方法是在底边框上放置一个黑色补丁并重新写入新属性,而无需更改顶边框和侧边框,也无需更改纵横比。所有这些都必须使用PIL完成。

问题是如何在底部边框上放置一个黑框?

我尝试过https://pillow.readthedocs.io/en/3.3.x/reference/ImageOps.html#PIL.ImageOps.fit所述的ImageOps.fit(),但长宽比似乎不合适,我想在黑框上覆盖黑框,而不要裁剪照片。

2 个答案:

答案 0 :(得分:1)

在我看来,似乎最简单的解决方案是使用几个循环和Image.putpixel

快速在想要的区域绘制黑色像素

enter image description here

from PIL import Image

img = Image.open('red.png')

for x in range(img.width):
    for y in range(img.height - 40, img.height):
        img.putpixel((x, y), (0, 0, 0))

img.save('red2.png')

enter image description here

答案 1 :(得分:0)

我认为最简单的方法是创建一个新的黑色图像并将其粘贴到您现有的图像上-

from PIL import Image
im = Image.open('test.png')
blackBox = Image.new(im.mode, (im.width, 50), '#000')
im.paste(blackBox, (0, im.height - blackBox.height))

或者,您可以使用ImageDraw-http://pillow.readthedocs.io/en/5.2.x/reference/ImageDraw.html-用于绘制矩形和其他形状。

from PIL import Image, ImageDraw
im = Image.open('test.png')
d = ImageDraw.Draw(im)
d.rectangle((0, im.height - 50, im.width, im.height), fill='#000')