54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
| # 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)
 |