コード例 #1
0
ファイル: qr.py プロジェクト: xqat/pyqrnative
 def make(self):
     if self.needs_update == True:
         self.qr = QRCode(self.size, self.level)
         self.qr.addData(self.data)
         # Check that the data fits into the QR code of the required size:
         size = self.qr.getMinimumSize()
         if self.size < size:
             self.size = size
             self.qr = QRCode(size, self.level)
             self.qr.addData(self.data)
         self.qr.make()
         self.image = self.qr.makeImage()
         self.needs_update = False
コード例 #2
0
ファイル: qr.py プロジェクト: icedwater/pyqrnative
	def make(self):
		if self.needs_update == True:
			self.qr = QRCode(self.size, self.level)
			self.qr.addData(self.data)
			# Check that the data fits into the QR code of the required size:
			size = self.qr.getMinimumSize()
			if self.size < size: 
				self.size = size
				self.qr = QRCode(size, self.level)
				self.qr.addData(self.data)
			self.qr.make()
			self.image = self.qr.makeImage()
			self.needs_update = False
コード例 #3
0
ファイル: qr.py プロジェクト: icedwater/pyqrnative
class QR():
	''' Base QR Code API class.'''
	def __init__(self, size=1, level = QRErrorCorrectLevel.M):
		self.qr = QRCode(size, level)
		self.data = ''
		self.level = level
		self.size = size
		self.needs_update = True
		
	def write(self, text):
		self.data += text.__str__()
		self.needs_update = True
		
	def make(self):
		if self.needs_update == True:
			self.qr = QRCode(self.size, self.level)
			self.qr.addData(self.data)
			# Check that the data fits into the QR code of the required size:
			size = self.qr.getMinimumSize()
			if self.size < size: 
				self.size = size
				self.qr = QRCode(size, self.level)
				self.qr.addData(self.data)
			self.qr.make()
			self.image = self.qr.makeImage()
			self.needs_update = False
		
	def display(self):
		if self.needs_update:
			self.make()
		self.image.show()
		
	def save(self, imagename):
		self.image.save(imagename)
コード例 #4
0
ファイル: qr.py プロジェクト: xqat/pyqrnative
class QR():
    ''' Base QR Code API class.'''
    def __init__(self, size=1, level=QRErrorCorrectLevel.M):
        self.qr = QRCode(size, level)
        self.data = ''
        self.level = level
        self.size = size
        self.needs_update = True

    def write(self, text):
        self.data += text.__str__()
        self.needs_update = True

    def make(self):
        if self.needs_update == True:
            self.qr = QRCode(self.size, self.level)
            self.qr.addData(self.data)
            # Check that the data fits into the QR code of the required size:
            size = self.qr.getMinimumSize()
            if self.size < size:
                self.size = size
                self.qr = QRCode(size, self.level)
                self.qr.addData(self.data)
            self.qr.make()
            self.image = self.qr.makeImage()
            self.needs_update = False

    def display(self):
        if self.needs_update:
            self.make()
        self.image.show()

    def save(self, imagename):
        self.image.save(imagename)
コード例 #5
0
ファイル: qrcode.py プロジェクト: tuxador/Reporter
    def make_image(self):
        qr = QRCode(9, QRErrorCorrectLevel.L)  # 8 handles long data also
        qr.addData(self.data)
        qr.make()  # todo: handle typeerror when data is too large

        im = qr.makeImage()

        im.save(self.img_path, "JPEG")
コード例 #6
0
ファイル: qrcode.py プロジェクト: RajaS/Reporter
    def make_image(self):
        qr = QRCode(9, QRErrorCorrectLevel.L) # 8 handles long data also
        qr.addData(self.data)
        qr.make() # todo: handle typeerror when data is too large

        im = qr.makeImage()
        
        im.save(self.img_path, "JPEG")
コード例 #7
0
ファイル: paper-keys.py プロジェクト: bitcoin-labs/paper-keys
def text_to_qrSvg(text, left = 0, top = 0, width = 100):
  
  qr = QRCode(qr_version_for_h(text), QRErrorCorrectLevel.H)
  qr.addData(text)
  qr.make()
  
  size = float(width) / qr.getModuleCount()
  antigapFactor = 1.05
  
  arr = []
  for y in range(qr.getModuleCount()):
    for x in range(qr.getModuleCount()):
      if qr.isDark(y, x):
        arr.append(
            '<rect x="' + f2s(left + x * size) +
            '" y="' + f2s(top + y * size) +
            '" width="' + f2s(size * antigapFactor) +
            '" height="' + f2s(size * antigapFactor) +
            '" fill="#000000" />\n')
  
  return ''.join(arr)
コード例 #8
0
    def qr_data_uri(self):
        """Generates a QR Code and returns it as a data URI"""

        qr = QRCode(4, QRErrorCorrectLevel.L)
        qr.addData(self.hmac())
        qr.make()
        im = qr.makeImage()

        # the image in the data uri seems to be rotated, unintentionally.
        im = im.rotate(180)

        qr_string = StringIO.StringIO()
        im.save(qr_string, format="PNG")
        format = "data:image/png;base64,{0}"
        return format.format(base64.b64encode(qr_string.getvalue()))
コード例 #9
0
ファイル: qrgen.py プロジェクト: septembrium/omg-enzo
def save_qrcode(text, img_type, path, name, qr_type_number, error_correct_level):
    # write qr code to filesystem
    if img_type not in QR_IMG_TYPES:
        raise ImageTypeException("can't generate QR Code, not a valid type")
    if not toolbox.string_has_content(text):
        raise ValueError("can't generate QR Code without proper string content")
    qr = QRCode(qr_type_number, error_correct_level)
    qr.addData(text)
    qr.make()
    im = qr.makeImage()
    qrcode_filename = name+img_type
    im.save(QR_FS_ROOT+qrcode_filename)
    return qrcode_filename
コード例 #10
0
ファイル: models.py プロジェクト: lrvick/django-barcode-auth
def user_create_barcode(sender, instance, created, **kwargs):
    instance = User.objects.get(email=instance.email)
    password_hash = gen_passhash(instance)
    qr = QRCode(8, QRErrorCorrectLevel.Q)
    qr.addData("####%s|%s" % (str(instance.pk), str(password_hash)))
    qr.make()
    im = qr.makeImage()
    temp_file = StringIO()

    # We'll take the username if we have to, but prefer first+last
    im.save(temp_file, format='png')
    barcode_contents = ContentFile(temp_file.getvalue())

    user_barcode = UserBarcode.objects.get_or_create(user=instance)[0]
    user_barcode.barcode.save('%s.png' % str(instance.pk), barcode_contents)

    if settings.PRINT_CARDS:
        print_card(instance, user_barcode.barcode.name)
    pass
コード例 #11
0
ファイル: models.py プロジェクト: lrvick/django-barcode-auth
def user_create_barcode(sender, instance, created, **kwargs):
    instance = User.objects.get(email=instance.email)
    password_hash = gen_passhash(instance)
    qr = QRCode(8, QRErrorCorrectLevel.Q)
    qr.addData("####%s|%s" % (str(instance.pk), str(password_hash)))
    qr.make()
    im = qr.makeImage()
    temp_file = StringIO()

    # We'll take the username if we have to, but prefer first+last
    im.save(temp_file, format='png')
    barcode_contents = ContentFile(temp_file.getvalue())

    user_barcode = UserBarcode.objects.get_or_create(user=instance)[0]
    user_barcode.barcode.save('%s.png' % str(instance.pk), barcode_contents)

    if settings.PRINT_CARDS:
        print_card(instance, user_barcode.barcode.name)
    pass
コード例 #12
0
ファイル: printing.py プロジェクト: B-Rich/django-badger
def render_label(request, c, metrics, da, badge_img, debug):
    """Render a single label"""
    badge = da.badge

    badge_image_width = (1.0 + (1.0 / 64.0)) * inch
    badge_image_height = (1.0 + (1.0 / 64.0)) * inch

    qr_left = badge_image_width - metrics["qr_overlap"]
    qr_bottom = badge_image_height - metrics["qr_overlap"]
    qr_width = metrics["width"] - qr_left
    qr_height = metrics["height"] - qr_bottom

    if False and debug:
        # Draw some layout lines on debug.
        c.setLineWidth(0.3)
        c.rect(0, 0, metrics["width"], metrics["height"])
        c.rect(qr_left, qr_bottom, qr_width, qr_height)
        c.rect(0, 0, badge_image_width, badge_image_height)

    fit_text(c, da.badge.title, 0.0, badge_image_height, badge_image_width, qr_height)

    c.saveState()
    c.rotate(-90)

    code_height = qr_height * (0.45)
    claim_height = qr_height - code_height

    c.setFont("Courier", code_height)
    c.drawCentredString(0 - (badge_image_width / 2.0), metrics["height"] - code_height, da.claim_code)

    text = """
        <font name="Helvetica">Claim at</font> <font name="Courier">%s</font>
    """ % (
        settings.SITE_TITLE
    )
    fit_text(c, text, 0 - badge_image_height, badge_image_width, badge_image_width, claim_height)

    c.restoreState()

    # Attempt to build a QR code image for the claim URL
    claim_url = request.build_absolute_uri(da.get_claim_url())
    qr_img = None
    try:
        # Try using PyQRNative: http://code.google.com/p/pyqrnative/
        # badg.us should have this in vendor-local
        from PyQRNative import QRCode, QRErrorCorrectLevel

        # TODO: Good-enough settings?
        if len(claim_url) < 20:
            qr = QRCode(3, QRErrorCorrectLevel.L)
        elif len(claim_url) < 50:
            qr = QRCode(4, QRErrorCorrectLevel.L)
        else:
            qr = QRCode(10, QRErrorCorrectLevel.L)
        qr.addData(claim_url)
        qr.make()
        qr_img = ImageReader(qr.makeImage())

    except ImportError:
        try:
            # Hmm, if we don't have PyQRNative, then try abusing this web
            # service. Should be fine for low volumes.
            qr_url = "http://api.qrserver.com/v1/create-qr-code/?%s" % urllib.urlencode(
                {"size": "%sx%s" % (500, 500), "data": claim_url}
            )

            qr_img = ImageReader(StringIO(urllib2.urlopen(qr_url).read()))

        except Exception:
            # Ignore issues in drawing the QR code - maybe show an error?
            pass

    if qr_img:
        c.drawImage(qr_img, qr_left, qr_bottom, qr_width, qr_height)

    c.drawImage(badge_img, 0.0 * inch, 0.0 * inch, badge_image_width, badge_image_height)
コード例 #13
0
ファイル: cli-qr.py プロジェクト: cdhowie/cli-qr
    print 'Usage: python', sys.argv[0], 'content'
    sys.exit(1)

levels = [17, 32, 53, 78, 106, 134, 154, 192, 230, 271]
level = None

for i in zip(range(1, 11), levels):
    if len(text) <= i[1]:
        level = i[0]
        break

if level is None:
    print 'Content too long (271 characters maximum).'
    sys.exit(1)

qr = QRCode(level, QRErrorCorrectLevel.L)
qr.addData(text)
qr.make()

dark = '  '
light = u'\u2588\u2588'

width = qr.moduleCount

for i in range(4):
    print light * (qr.moduleCount + 8)

for y in range(qr.moduleCount):
    row = light * 4

    for x in range(qr.moduleCount):
コード例 #14
0
ファイル: conf.py プロジェクト: 6502/pycon_site
def ticket(image, ticket, utils):
    image = image.copy()
    if not ticket:
        return image

    import string
    _multi = (
        'pier maria', 'gian battista', 'arnaldo miguel', 'dr. yves', 'dr. stefan', 'mr yun',
    )
    check = ticket['name'].lower()
    for x in _multi:
        if check.startswith(x):
            first_name = ticket['name'][:len(x)].strip()
            last_name = ticket['name'][len(x):].strip()
            break
    else:
        try:
            first_name, last_name = ticket['name'].split(' ', 1)
        except ValueError:
            first_name = ticket['name']
            last_name = ''
    tagline = ticket.get('tagline', '').strip()

    first_name = first_name.upper().strip()
    last_name = string.capwords(last_name.strip())

    color_name = 75, 129, 135
    color_info = 125, 111, 96

    w = image.size[0] / 2
    name_width = max(
        _FONTS['name'].getsize(first_name)[0],
        _FONTS['name'].getsize(last_name)[0])
    if name_width > w - 60:
        font = _FONTS['name_small']
        name_y = 400, 510
    else:
        font = _FONTS['name']
        name_y = 460, 590

    if ticket['badge_image']:
        logo = Image.open(ticket['badge_image']).resize((64, 64))
        if logo.mode != 'RGBA':
            if logo.mode == 'LA':
                logo = logo.convert('RGBA')
            else:
                if logo.mode != 'RGB':
                    logo = logo.convert('RGB')
                logo = makeColorTransparent(logo, logo.getpixel((0, 0)), thresh2=150)
    else:
        logo = PY_LOGO
    rows = [
        (first_name, (50, name_y[0]), font, color_name),
        (last_name, (50, name_y[1]), font, color_name),
        (tagline, (50, 880), _FONTS['info'], color_info),
    ] + [
        (logo, (50 + (logo.size[0] + 20) * ix, 700)) for ix in range(ticket.get('experience', 0))
    ]
    mirrored = [
        (row[0], ) + ((w + row[1][0], row[1][1]),) + row[2:]
        for row in rows
    ]
    for row in rows + mirrored:
        if isinstance(row[0], Image.Image):
            image.paste(row[0], row[1], row[0])
        else:
            t, pos, font, color  = row
            utils['draw_info'](image, w - 60, t, pos, font, color)

    if ticket.get('profile-link'):
        qr = QRCode(8, QRErrorCorrectLevel.H)
        qr.addData(ticket['profile-link'])
        qr.make()
        im = qr.makeImage().resize((int(18*0.03937*300), int(18*0.03937*300)))
        image.paste(im, (w + 600, 1030))
    return image
コード例 #15
0
def render_label(request, c, metrics, da, badge_img, debug):
    """Render a single label"""
    badge = da.badge

    badge_image_width = (1.0 + (1.0/64.0)) * inch
    badge_image_height = (1.0 + (1.0/64.0)) * inch

    qr_left = badge_image_width - metrics['qr_overlap']
    qr_bottom = badge_image_height - metrics['qr_overlap']
    qr_width = metrics['width'] - qr_left
    qr_height = metrics['height'] - qr_bottom

    if False and debug:
        # Draw some layout lines on debug.
        c.setLineWidth(0.3)
        c.rect(0, 0, metrics['width'], metrics['height'])
        c.rect(qr_left, qr_bottom, qr_width, qr_height)
        c.rect(0, 0, badge_image_width, badge_image_height)


    fit_text(c, da.badge.title,
             0.0, badge_image_height,
             badge_image_width, qr_height)

    c.saveState()
    c.rotate(-90)

    code_height = qr_height * (0.45)
    claim_height = qr_height - code_height

    c.setFont("Courier", code_height)
    c.drawCentredString(0 - (badge_image_width / 2.0),
                        metrics['height'] - code_height,
                        da.claim_code)
    
    text = """
        <font name="Helvetica">Claim at</font> <font name="Courier">%s</font>
    """ % (settings.SITE_TITLE)
    fit_text(c, text,
             0 - badge_image_height, badge_image_width,
             badge_image_width, claim_height)
    
    c.restoreState()

    # Attempt to build a QR code image for the claim URL
    claim_url = request.build_absolute_uri(da.get_claim_url())
    qr_img = None
    try:
        # Try using PyQRNative: http://code.google.com/p/pyqrnative/
        # badg.us should have this in vendor-local
        from PyQRNative import QRCode, QRErrorCorrectLevel
        # TODO: Good-enough settings?
        if len(claim_url) < 20:
            qr = QRCode(3, QRErrorCorrectLevel.L)
        elif len(claim_url) < 50:
            qr = QRCode(4, QRErrorCorrectLevel.L)
        else:
            qr = QRCode(10, QRErrorCorrectLevel.L)
        qr.addData(claim_url)
        qr.make()
        qr_img = ImageReader(qr.makeImage())

    except ImportError:
        try:
            # Hmm, if we don't have PyQRNative, then try abusing this web
            # service. Should be fine for low volumes.
            qr_url = ("http://api.qrserver.com/v1/create-qr-code/?%s" %
                urllib.urlencode({'size':'%sx%s' % (500, 500), 
                                  'data':claim_url}))

            qr_img = ImageReader(StringIO(urllib2.urlopen(qr_url).read()))

        except Exception, e:
            # Ignore issues in drawing the QR code - maybe show an error?
            pass
コード例 #16
0
ファイル: qr.py プロジェクト: icedwater/pyqrnative
	def __init__(self, size=1, level = QRErrorCorrectLevel.M):
		self.qr = QRCode(size, level)
		self.data = ''
		self.level = level
		self.size = size
		self.needs_update = True
コード例 #17
0
ファイル: qr.py プロジェクト: xqat/pyqrnative
 def __init__(self, size=1, level=QRErrorCorrectLevel.M):
     self.qr = QRCode(size, level)
     self.data = ''
     self.level = level
     self.size = size
     self.needs_update = True
コード例 #18
0
def ticket(image, ticket, utils):
    image = image.copy()
    if not ticket:
        return image

    import string
    _multi = (
        'pier maria',
        'gian battista',
        'arnaldo miguel',
        'dr. yves',
        'dr. stefan',
        'mr yun',
    )
    check = ticket['name'].lower()
    for x in _multi:
        if check.startswith(x):
            first_name = ticket['name'][:len(x)].strip()
            last_name = ticket['name'][len(x):].strip()
            break
    else:
        try:
            first_name, last_name = ticket['name'].split(' ', 1)
        except ValueError:
            first_name = ticket['name']
            last_name = ''
    tagline = ticket.get('tagline', '').strip()

    first_name = first_name.upper().strip()
    last_name = string.capwords(last_name.strip())

    color_name = 75, 129, 135
    color_info = 125, 111, 96

    w = image.size[0] / 2
    name_width = max(_FONTS['name'].getsize(first_name)[0],
                     _FONTS['name'].getsize(last_name)[0])
    if name_width > w - 60:
        font = _FONTS['name_small']
        name_y = 400, 510
    else:
        font = _FONTS['name']
        name_y = 460, 590

    if ticket['badge_image']:
        logo = Image.open(ticket['badge_image']).resize((64, 64))
        if logo.mode != 'RGBA':
            if logo.mode == 'LA':
                logo = logo.convert('RGBA')
            else:
                if logo.mode != 'RGB':
                    logo = logo.convert('RGB')
                logo = makeColorTransparent(logo,
                                            logo.getpixel((0, 0)),
                                            thresh2=150)
    else:
        logo = PY_LOGO
    rows = [
        (first_name, (50, name_y[0]), font, color_name),
        (last_name, (50, name_y[1]), font, color_name),
        (tagline, (50, 880), _FONTS['info'], color_info),
    ] + [(logo, (50 + (logo.size[0] + 20) * ix, 700))
         for ix in range(ticket.get('experience', 0))]
    mirrored = [(row[0], ) + ((w + row[1][0], row[1][1]), ) + row[2:]
                for row in rows]
    for row in rows + mirrored:
        if isinstance(row[0], Image.Image):
            image.paste(row[0], row[1], row[0])
        else:
            t, pos, font, color = row
            utils['draw_info'](image, w - 60, t, pos, font, color)

    if ticket.get('profile-link'):
        qr = QRCode(8, QRErrorCorrectLevel.H)
        qr.addData(ticket['profile-link'])
        qr.make()
        im = qr.makeImage().resize(
            (int(18 * 0.03937 * 300), int(18 * 0.03937 * 300)))
        image.paste(im, (w + 600, 1030))
    return image