示例#1
0
    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)
示例#2
0
    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