在Python中程序化地添加图像装饰(边框)

5 投票
3 回答
9652 浏览
提问于 2025-04-15 17:35

我想在Python中创建一个边框。有没有什么库可以导入来实现这个功能呢?

需要注意的是,我不想使用任何图像遮罩来创建这个效果(比如,我不想用像GIMP这样的图像编辑软件来制作边框图像遮罩)。

我想要的效果是这样的:

import fooImageBorders 
import Image 

foo = Image.open("someImage.jpg")
foo2 = fooImageBorders.bevel(foo, color = black)

...我可以自己写方法来添加边框,但如果已经有类似的库提供了全面的边框选项,我希望能直接使用它。

我查看了PIL的文档,但没有找到实现这个功能的方法。我使用的是Windows XP,而且如果没有cygwin,似乎也无法为Python 2.6安装PythonMagick。

3 个回答

1
foo2 = foo.copy()
draw = ImageDraw.Draw(foo2)
for i in range(width):
    draw.rectangle([i, i, foo2.size[0]-i-1, foo2.size[1]-i-1], outline = color)
foo2 = Image.new(foo.mode, (foo.size[0] + 2*width, foo.size[1] + 2*width))
foo2.paste(foo, (width, width))

foo2 将会有一个宽度为 width 像素的边框,颜色为 color

如果你想让每一边的边框颜色不同,可以把 .rectangle 替换成重复使用 .line 的方式。

如果你希望边框不遮住已有图像的任何部分,可以使用这个方法来代替 foo.copy()

2

你可以使用PythonMagick模块。这个模块的文档可以在这里找到(Magic ++文档)

举个例子:如果你想给一张图片加上一个红色的2像素边框,你需要用到下面的代码。

from PythonMagick import Image
i = Image('example.jpg') # reades image and creates an image instance
i.borderColor("#ff0000") # sets border paint color to red
i.border("2x2") # paints a 2 pixel border
i.write("out.jpg")
# writes the image to a file 
11

看看PIL库里的模块。

import Image
import ImageOps

x = Image.open('test.png')
y = ImageOps.expand(x,border=5,fill='red')
y.save('test2.png')

撰写回答