AttributeError: 'str' object has no attribute 'rotate'
AttributeError: 'str' object has no attribute 'rotate'
我在文字上创建图像,
需要360度旋转,
得到这个错误,
请帮帮我
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont, ImageOps
img = Image.open('cupcake toppe.png')
I1 = ImageDraw.Draw(img)
myFont2 = ImageFont.truetype('arial.ttf', 15)
text2 = "3345"
img1 = text2.rotate(17.5, expand=1)
I1.text((50, 15), text2, img1, font=myFont2, fill=(0, 0, 0))
img.show()
我知道这个方法,希望对你有帮助:
我们将绘制的文本及其字体:
label = 'Hello'
font = ImageFont.truetype('arial.ttf', 36)
为方便起见,我们将固定线的高度,因为 Pillow
根据文本更改它,这可能会干扰旋转。特别是文字A
的高度是33 pixels
,而文字q
的高度已经是40 pixels
,因为棍子往下粘。为了获得适合任何字母的整个字符串的准确高度,出于某种原因,我们将使用未记录的 getmetrics 方法:
line_height = sum(font.getmetrics()) # 33 + 8 = 41
现在我们将在单独的干净图像上绘制文本。在这里我们将应用一个小技巧:图片将呈灰色阴影并表示 alpha 通道。黑色 (0) — 完全透明,白色 (255) — 完全不透明。为了使图像成为文本的大小,我们将使用 getsize 方法获取其宽度,并从常量 line_height.
中获取高度
fontimage = Image.new('L', (font.getsize(label)[0], line_height))
ImageDraw.Draw(fontimage).text((0, 0), label, fill=255, font=font)
现在让我们扭转局面。我们需要添加 expand=True
来增加图像的大小,以便旋转的文本适合。
fontimage = fontimage.rotate(80, resample=Image.BICUBIC, expand=True)
现在,我们将图像叠加在原件上
orig = Image.open('original.png')
orig.paste((255, 0, 0), box=(0, 0), mask=fontimage)
第一个参数指定我们正在应用的图像。相反,您可以指定颜色,我就是这样做的:这是 RGB,代表红色。
给他一个有两个元素的元组时的第二个参数表示要插入图片的地方。
我在文字上创建图像, 需要360度旋转, 得到这个错误, 请帮帮我
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont, ImageOps
img = Image.open('cupcake toppe.png')
I1 = ImageDraw.Draw(img)
myFont2 = ImageFont.truetype('arial.ttf', 15)
text2 = "3345"
img1 = text2.rotate(17.5, expand=1)
I1.text((50, 15), text2, img1, font=myFont2, fill=(0, 0, 0))
img.show()
我知道这个方法,希望对你有帮助:
我们将绘制的文本及其字体:
label = 'Hello'
font = ImageFont.truetype('arial.ttf', 36)
为方便起见,我们将固定线的高度,因为 Pillow
根据文本更改它,这可能会干扰旋转。特别是文字A
的高度是33 pixels
,而文字q
的高度已经是40 pixels
,因为棍子往下粘。为了获得适合任何字母的整个字符串的准确高度,出于某种原因,我们将使用未记录的 getmetrics 方法:
line_height = sum(font.getmetrics()) # 33 + 8 = 41
现在我们将在单独的干净图像上绘制文本。在这里我们将应用一个小技巧:图片将呈灰色阴影并表示 alpha 通道。黑色 (0) — 完全透明,白色 (255) — 完全不透明。为了使图像成为文本的大小,我们将使用 getsize 方法获取其宽度,并从常量 line_height.
中获取高度fontimage = Image.new('L', (font.getsize(label)[0], line_height))
ImageDraw.Draw(fontimage).text((0, 0), label, fill=255, font=font)
现在让我们扭转局面。我们需要添加 expand=True
来增加图像的大小,以便旋转的文本适合。
fontimage = fontimage.rotate(80, resample=Image.BICUBIC, expand=True)
现在,我们将图像叠加在原件上
orig = Image.open('original.png')
orig.paste((255, 0, 0), box=(0, 0), mask=fontimage)
第一个参数指定我们正在应用的图像。相反,您可以指定颜色,我就是这样做的:这是 RGB,代表红色。
给他一个有两个元素的元组时的第二个参数表示要插入图片的地方。