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)
 |