首页 > 解决方案 > 在 Python PIL 中覆盖图像上的边框

问题描述

我有一个画廊应用程序,用户上传照片,我的代码给它一个边框,在边框上写入一些照片属性并存储它。

image2 = Image.open('media/' + str(image.file))
width, height = image2.size;
image2 = ImageOps.expand(image2, border=(int(width/25),int(height/20),int(width/25),int(height/10)), fill='rgb(0,0,0)')

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

所以在这里,我的方法是在底部边框上放一个黑色补丁并重新编写新属性,而不更改顶部和侧边框,并且不更改纵横比。所有这些都必须使用 PIL 来完成。

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

我尝试了此处提到的 ImageOps.fit() https://pillow.readthedocs.io/en/3.3.x/reference/ImageOps.html#PIL.ImageOps.fit,但纵横比似乎不正确并且我想在黑色边框上覆盖一个黑框,而不是裁剪照片。

标签: pythondjangoimagepython-imaging-librarypillow

解决方案


对我来说,似乎最简单的解决方案就是使用几个循环快速绘制您想要的区域中的黑色像素,然后Image.putpixel

在此处输入图像描述

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')

在此处输入图像描述


推荐阅读