codekingpro/portable-devtools
114k
1import qrcode.image.base2from qrcode.compat.pil import Image, ImageDraw3 4 5class PilImage(qrcode.image.base.BaseImage):6 """7 PIL image builder, default format is PNG.8 """9 10 kind = "PNG"11 12 def new_image(self, **kwargs):13 back_color = kwargs.get("back_color", "white")14 fill_color = kwargs.get("fill_color", "black")15 16 try:17 fill_color = fill_color.lower()18 except AttributeError:19 pass20 21 try:22 back_color = back_color.lower()23 except AttributeError:24 pass25 26 # L mode (1 mode) color = (r*299 + g*587 + b*114)//100027 if fill_color == "black" and back_color == "white":28 mode = "1"29 fill_color = 030 if back_color == "white":31 back_color = 25532 elif back_color == "transparent":33 mode = "RGBA"34 back_color = None35 else:36 mode = "RGB"37 38 img = Image.new(mode, (self.pixel_size, self.pixel_size), back_color)39 self.fill_color = fill_color40 self._idr = ImageDraw.Draw(img)41 return img42 43 def drawrect(self, row, col):44 box = self.pixel_box(row, col)45 self._idr.rectangle(box, fill=self.fill_color)46 47 def save(self, stream, format=None, **kwargs):48 kind = kwargs.pop("kind", self.kind)49 if format is None:50 format = kind51 self._img.save(stream, format=format, **kwargs)52 53 def __getattr__(self, name):54 return getattr(self._img, name)55 