def encode(self, text, **kw): border = kw.get('border', self.border) w = kw.get('width', self.width) - border * 2 v = kw.get('version', self.version) mode = kw.get('mode', self.mode.ALNUM) eclevel = kw.get('eclevel', self.eclevel.L) case_sensitive = kw.get('case_sensitive', self.case_sensitive) if v > 40: raise InvalidArgsError('version should be between 1 and 40') version, width, data = _encode(text+'\0', case_sensitive, v, eclevel, mode) rawdata = '' dotsize = w / width realwidth = width * dotsize for y in range(width): line = '' for x in range(width): if ord(data[y*width+x]) % 2: line += dotsize * chr(0) else: line += dotsize * chr(255) lines = dotsize * line rawdata += lines image = fromstring('L', (realwidth, realwidth), rawdata) return expand(image, border, 255)
def convert_for_output(self): in_x_pixels = self.inputImage.size[0] in_y_pixels = self.inputImage.size[1] border_pixels = self.border*self.pointspermm output_max_x_pixels = self.xsize*self.pointspermm - border_pixels output_max_y_pixels = self.ysize*self.pointspermm - border_pixels if self.debug: print "Converting for output:" print " output pixels per mm: ", self.pointspermm print " input size: %dx%d pixels" % (in_x_pixels,in_y_pixels) print " border pixels: ", border_pixels print " output max size: %dx%d pixels" % (output_max_x_pixels, output_max_y_pixels) # Resize if needed if (in_x_pixels > output_max_x_pixels) or (in_y_pixels > output_max_y_pixels): # We have to reduce the image resolution xratio = float(output_max_x_pixels)/float(in_x_pixels) yratio = float(output_max_y_pixels)/float(in_y_pixels) if xratio < yratio: newxsize = output_max_x_pixels newysize = int(float(self.inputImage.size[1]) * xratio) else: newysize = output_max_y_pixels newxsize = int(float(self.inputImage.size[0]) * yratio) if self.debug: print " Resizing to %dx%d pixels" % (newxsize, newysize) self.inputImage = self.inputImage.resize((newxsize,newysize)) if self.twotone: # We want a bicolor interpretation if self.inputImage.mode != "1": if self.debug: print " Converting to bicolor" self.inputImage = self.inputImage.convert("1") else: # Change to grayscale if needed if self.inputImage.mode != "L": if self.debug: print " Converting to grayscale" self.inputImage = self.inputImage.convert("L") if self.border > 0: if self.debug: print " Adding border of %d pixels" % border_pixels self.inputImage = expand(self.inputImage, border_pixels) if self.invert: if self.debug: print " Inverting image tones" self.inputImage = invert(self.inputImage) if self.debug: print "Extrema: ", self.inputImage.getextrema() return