Esempio n. 1
0
def CreateQRMatrix(dataToEncode, errLevel=QRErrorCorrectLevel.L):
   dataLen = len(dataToEncode)
   baseSz = 4 if errLevel == QRErrorCorrectLevel.L else \
            5 if errLevel == QRErrorCorrectLevel.M else \
            6 if errLevel == QRErrorCorrectLevel.Q else \
            7 # errLevel = QRErrorCorrectLevel.H
   sz = baseSz if dataLen < 70 else  5 +  (dataLen - 70) / 30
   qrmtrx = [[]]
   while sz<20:
      try:
         errCorrectEnum = getattr(QRErrorCorrectLevel, errLevel.upper())
         qr = QRCode(sz, errCorrectEnum)
         qr.addData(dataToEncode)
         qr.make()
         success=True
         break
      except TypeError:
         sz += 1

   if not success:
      LOGERROR('Unsuccessful attempt to create QR code')
      LOGERROR('Data to encode: (Length: %s, isAscii: %s)', \
                     len(dataToEncode), isASCII(dataToEncode))
      return [[0]], 1

   qrmtrx = []
   modCt = qr.getModuleCount()
   for r in range(modCt):
      tempList = [0]*modCt
      for c in range(modCt):
         # The matrix is transposed by default, from what we normally expect
         tempList[c] = 1 if qr.isDark(c,r) else 0
      qrmtrx.append(tempList)

   return [qrmtrx, modCt]
    def setAsciiData(self,
                     newAscii,
                     prefSize=160,
                     errLevel=QRErrorCorrectLevel.L,
                     repaint=True):
        if len(newAscii) == 0:
            self.qrmtrx = [[0]]
            self.modCt = 1
            self.pxScale = 1
            return

        self.theData = newAscii
        sz = 3
        success = False
        while sz < 20:
            try:
                self.qr = QRCode(sz, errLevel)
                self.qr.addData(self.theData)
                self.qr.make()
                success = True
                break
            except TypeError:
                sz += 1

        if not success:
            LOGERROR('Unsuccessful attempt to create QR code')
            self.qrmtrx = [[0]]
            return

        self.qrmtrx = []
        self.modCt = self.qr.getModuleCount()
        for r in range(self.modCt):
            tempList = [0] * self.modCt
            for c in range(self.modCt):
                tempList[c] = 1 if self.qr.isDark(r, c) else 0
            self.qrmtrx.append(tempList)

        self.setPreferredSize(prefSize)