python - PIL ImageDraw.Draw.text 填充属性引发 TypeError : an integer is required

标签 python django python-imaging-library

我正在尝试在 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/

相关文章:

python - celery 与 djcelery

python - 使用 Python OpenCV 删除图像的黑色标题部分

python - Django:根据预保存信号调整图像大小

python - Youtube API每个请求或错误返回1个视频

python - 计算文件文本中的共现情况

sql - 在没有网络授权的情况下使用 Google Cloud SQL

python - 使用 Python/PIL 的多边形裁剪/剪辑

python - 如何为切片 numpy 数组提供语法糖?

python - Pandas 中 2 列之间的 pct_change,带有行偏移

python - Django 1.6.2 : CSS not extending to child templates