I'm trying to write text on an image of a QR-Code, but I can't find a way to write in another colour than white (which is pretty useless for a QR-Code).
So here is the error page I get (I'm using Django too) :
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
In my view I have:
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')
with these imports:
import ImageDraw
import ImageFont
import Image
NB: Python couldn't find "PIL" when I tried to write
import PIL
from PIL import Image, ImageFond, ImageDraw
but it worked without mentioning it, I guess it's already included in Django by default. Plus, we can see in the traceback that Python does indeed look into /dist-packages/PIL
Thank you for your help.
Does your image have the right mode? I guess the current mode is 'wrong'. An image should be in RGB mode before it accepts a RGB color tuple.
Read about mode: http://effbot.org/imagingbook/concepts.htm#mode
Convert the image to RGB before writing the yellow text:
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')
This import fails because of misspelled ImageFond. Should read:
from PIL import Image, ImageFont, ImageDraw
If you still have import problems try Pillow. Pillow is a better-packaged version of PIL.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With