1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- # Needed on case-insensitive filesystems
- from __future__ import absolute_import
- # Try to import PIL in either of the two ways it can be installed.
- try:
- from PIL import Image, ImageDraw
- except ImportError: # pragma: no cover
- import Image
- import ImageDraw
- import qrcode.image.base
- class PilImage(qrcode.image.base.BaseImage):
- """
- PIL image builder, default format is PNG.
- """
- kind = "PNG"
- def new_image(self, **kwargs):
- back_color = kwargs.get("back_color", "white")
- fill_color = kwargs.get("fill_color", "black")
- if fill_color.lower() != "black" or back_color.lower() != "white":
- if back_color.lower() == "transparent":
- mode = "RGBA"
- back_color = None
- else:
- mode = "RGB"
- else:
- mode = "1"
- # L mode (1 mode) color = (r*299 + g*587 + b*114)//1000
- if fill_color.lower() == "black": fill_color = 0
- if back_color.lower() == "white": back_color = 255
- img = Image.new(mode, (self.pixel_size, self.pixel_size), back_color)
- self.fill_color = fill_color
- self._idr = ImageDraw.Draw(img)
- return img
- def drawrect(self, row, col):
- box = self.pixel_box(row, col)
- self._idr.rectangle(box, fill=self.fill_color)
- def save(self, stream, format=None, **kwargs):
- if format is None:
- format = kwargs.get("kind", self.kind)
- if "kind" in kwargs:
- del kwargs["kind"]
- self._img.save(stream, format=format, **kwargs)
- def __getattr__(self, name):
- return getattr(self._img, name)
|