对于python的imagemagick,大多数人推荐“魔杖”但是如何在python中使用它来附加图像?我想在python:http://www.imagemagick.org/Usage/annotating/中使用imagemagick在图像底部添加标签,但是wand api似乎非常基本,并且没有很多imgemagick命令,包括标签和追加。
在python中有没有其他方法可以使用imagemagick?我的图像是png类型,并且是python代码中的BytesIO流而不是文件,所以我不能使用命令行将它们传递给imagemagick,也不能将它们保存在任何临时文件中。
答案 0 :(得分:2)
我不确定你要求的是什么,但我猜你想写一个标签"低于"一个图像。以下是wand库的示例。
from wand.image import Image
from wand.compat import nested
from wand.color import Color
from wand.font import Font
with nested(Image(filename='logo:'),
Image(filename='null:')) as (source, text):
text.font = Font('Impact', 64)
text.read(filename='label:Hello world!')
largest_width = max(source.width, text.width)
offset = (largest_width - min(source.width, text.width)) / 2
with Image(width=largest_width,
height=source.height + text.height,
background=Color('WHITE')) as dst:
dst.composite(source, 0, 0)
dst.composite(text, int(offset), source.height)
dst.save(filename="output.png")
<强>概述强>
with nested(Image(filename='logo:'),
Image(filename='null:')) as (source, text):
创建两个图像。您将负责使用ByteIO缓冲区替换logo:
图像。 null:
图像是用于分配魔杖实例的占位符。
text.font = Font('Impact', 64)
text.read(filename='label:Hello world!')
这定义了字体&amp;要绘制的文字。 label:
协议可以替换为caption:
以获得其他行为(s?)。
with Image(width=largest_width,
height=source.height + text.height,
background=Color('WHITE')) as dst:
创建第三个&#34;空白&#34;图像足够大,可以包含两个图像。
dst.composite(source, 0, 0)
dst.composite(text, int(offset), source.height)
复制source
&amp;的图像数据。 text
新图片。
答案 1 :(得分:0)
Imagemagick很棒,但学习曲线陡峭。您需要安装第三方ImageMagick(根据您的python版本,必须是32位或64位)。考虑到需要将其添加到路径并且运行脚本需要可执行文件,单独安装是一件痛苦的事。
考虑一些更便携的东西,包含像Pillow这样的东西,它有许多功能可以实现你的目标。
pip install pillow
在枕头中,您可以阅读BytesIO的图像。并在它们上绘制或打印。有多种选择。
from PIL import Image, ImageDraw
import io
# Reading bytes from file but you can skip that and simply open your bytes like below.
with open('picture.jpg', 'rb') as f:
im = Image.open(io.BytesIO(f.read()))
draw = ImageDraw.Draw(im)
draw.text((10,10), "Hello World", fill=(255))
im.show() # do whatever you like with the image
查看文档以获取更多示例。 https://pillow.readthedocs.io/en/latest/