我想旋转和过去的旋转图像一样,在附加的图像。 我的结果未居中,文本不在图像中。 图像大小为794x1096 你能帮我吗
这是我的代码:
x = input('Insert Name Here ')
y = input('Insert full name')
img = Image.open("Path/watermark_example.png")
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('calibri.ttf', 55)
draw.text((30, 300),x,(128, 128, 128, 255), font=font)
draw.text((500, 500),x,(128, 128, 128, 255),font=font)
img1 = img.rotate(15, expand = True, fillcolor = 'white')
img.putalpha(128)
img.paste(img1)
img.show()
img.save(f'Path/watermark_example{y}.png')
创建普通水平水印更容易,因为它需要更少的工作
您必须创建与原始图像大小相同但背景透明的新空图像
RGBA
。接下来,您可以在不同的位置以不同的透明度绘制此新图像文本。最后,您必须使用Image.alpha_composite(original_image, text_image)
以期望的透明度在图像上放置文本要将文本放在中间,必须使用
现在,您可以将文本放在不同的位置,并且可以使用
for
-loop进行此操作放置旋转的图像需要更多的工作,因为首先必须使用文本生成图像,旋转图像,然后使用
paste()
将其放置在透明图像上,最后使用alpha_composite()
将透明图像放置在原始图像上此版本是通用的,因为您还可以使用此方法放置水平文本-您只需跳过
rotate()
。如果需要,还可以添加一些重缩放或其他修改但是,当文本图像太大,并且一个包含文本的矩形与另一个包含文本的矩形重叠时,可能会出现问题,因为
paste()
会删除以前的内容。然后它需要更复杂的版本,使用alpha_composite()
而不是paste()
顺便说一句:维基百科Lenna的原始图像:
编辑:
以前的版本有重叠文本图像的问题
新版本将每个文本单独合并,解决了这个问题
编辑:
我将代码更改为使用行中的行数来计算位置
对于2个单词,我将宽度分成3部分。在这个版本中,我使用线条来显示这些部分。文本的中心位于交叉线的位置
这种计算有一个缺点——它会在图像周围产生更大的边距
这将需要不同的计算来减少它。它必须得到图像宽度,减去2*文本宽度,然后将其分成3部分。然后第一个元素的位置需要
1*part_size + 0*text_with
,第二个元素的位置需要2*part_size + 1*text_with
,第n个元素的位置需要n*part_size + (n-1)*text_with
具有更好计算边距的代码
相关问题 更多 >
编程相关推荐