我正在尝试在 QR 码的图像上书写文本,但我找不到用白色以外的其他颜色书写的方法(这对于 QR 码来说毫无用处)。
这是我得到的错误页面(我也在使用 Django):
TypeError at /pret/qrcode/
an integer is required
Request Method: GET
Request URL: http://127.0.0.1:8000/pret/qrcode/
Django Version: 1.6.1
Exception Type: TypeError
Exception Value:
an integer is required
Exception Location: /usr/lib/python2.7/dist-packages/PIL/ImageDraw.py in _getink, line 146
Python Executable: /usr/bin/python
Python Version: 2.7.3
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
114. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/arthur/workspace/PretD/pret/views.py" in qrcodee
160. draw.text((0, 0),"This is a test",(255,255,0),font=font)
File "/usr/lib/python2.7/dist-packages/PIL/ImageDraw.py" in text
256. ink, fill = self._getink(fill)
File "/usr/lib/python2.7/dist-packages/PIL/ImageDraw.py" in _getink
146. ink = self.draw.draw_ink(ink, self.mode)
Exception Type: TypeError at /pret/qrcode/
Exception Value: an integer is required
在我看来我有:
foo = qrcode.make(request.user.email)
foo.format = "PNG"
foo.save('pret/static/media/qrcode.png')
font = ImageFont.truetype("pret/static/DejaVuSans.ttf", 20)
img=Image.open("pret/static/media/qrcode.png")
draw = ImageDraw.Draw(img)
draw.text((0, 0),"String test",(255,255,0),font=font)
draw = ImageDraw.Draw(img)
del draw
img.save('pret/static/media/qrcode.png')
使用这些导入:
import ImageDraw
import ImageFont
import Image
注意:当我尝试编写时,Python 找不到“PIL”
import PIL
from PIL import Image, ImageFond, ImageDraw
但它在没有提及的情况下工作,我猜它已经默认包含在 Django 中。另外,我们可以在回溯中看到 Python 确实查看了/dist-packages/PIL
感谢您的帮助。
最佳答案
你的图像有正确的模式吗?我猜当前的模式是“错误的”。图像在接受 RGB 颜色元组之前应该处于 RGB 模式。
阅读模式:http://effbot.org/imagingbook/concepts.htm#mode
在写入黄色文本之前将图像转换为 RGB:
img=Image.open("foo.png")
# Convert to RGB mode
if img.mode != "RGB":
img = img.convert("RGB")
draw = ImageDraw.Draw(img)
draw.text((0, 0), "Foo", (255, 0, 0), font=font)
img.save('foo.png')
由于拼写错误的 ImageFond,此导入失败。应该读作:
from PIL import Image, ImageFont, ImageDraw
如果您仍然有导入问题,请尝试 Pillow。 Pillow 是 PIL 的更好包装版本。
关于python - PIL ImageDraw.Draw.text 填充属性引发 TypeError : an integer is required,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20658265/