在 Python PIL 中覆盖图像上的边框
Overwriting a border on an image in 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)')
(注意这里我的下边框比上边框长,因为我在下边框写属性。)
现在我正在为上传的图像构建一个编辑功能,用户可以在其中更改上传图像的属性。但是已经写在border上的属性要被覆盖。
所以在这里,我的方法是在底部边框上放置一个黑色补丁,并在不更改顶部和侧边框以及不更改纵横比的情况下重新编写新属性。所有这些都必须使用 PIL 来完成。
问题是如何在底部边框上放置一个黑框?
我试过 ImageOps.fit() 如此处提到 https://pillow.readthedocs.io/en/3.3.x/reference/ImageOps.html#PIL.ImageOps.fit,但长宽比似乎不对,我想在黑色边框上覆盖一个黑框而不是裁剪照片.
我认为最简单的方法是创建一个新的黑色图像并粘贴到现有图像上 -
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')
对我来说,最简单的解决方案似乎是使用几个循环快速在您想要的区域绘制黑色像素,然后 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')
我有一个图库应用程序,用户可以在其中上传照片,我的代码会为其添加边框,在边框上写入一些照片属性并进行存储。
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)')
(注意这里我的下边框比上边框长,因为我在下边框写属性。) 现在我正在为上传的图像构建一个编辑功能,用户可以在其中更改上传图像的属性。但是已经写在border上的属性要被覆盖。
所以在这里,我的方法是在底部边框上放置一个黑色补丁,并在不更改顶部和侧边框以及不更改纵横比的情况下重新编写新属性。所有这些都必须使用 PIL 来完成。
问题是如何在底部边框上放置一个黑框?
我试过 ImageOps.fit() 如此处提到 https://pillow.readthedocs.io/en/3.3.x/reference/ImageOps.html#PIL.ImageOps.fit,但长宽比似乎不对,我想在黑色边框上覆盖一个黑框而不是裁剪照片.
我认为最简单的方法是创建一个新的黑色图像并粘贴到现有图像上 -
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')
对我来说,最简单的解决方案似乎是使用几个循环快速在您想要的区域绘制黑色像素,然后 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')