def takePictureCb(self, requestCode, resultCode, intent): if requestCode != CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE: return if resultCode != Activity.RESULT_OK: displayError(_("No image taken.")) return stream = ByteArrayOutputStream() done = intent.getExtras().get('data').compress( CompressFormat.PNG, 100, stream) stream.close() if not done: displayError(_("Failed to compress image.")) return ba = stream.toByteArray() stream = None img = None try: stream = StringIO(str(bytearray(ba))) img = Image.open(stream) except IOError as e: if stream: stream.close() displayError(e) return codes = img_decode.read_qr_codes(img) stream.close() if len(codes) < 1: displayError(_("No QR codes found.")) else: self.receiptInput.text = codes[0] self.selectInputType('QR')
def loadReceiptCb(self, path, filename): if not filename or len(filename) < 1: return full = os.path.join(path, filename[0]) try: with open(full, mode='rb') as f: img = Image.open(f) codes = img_decode.read_qr_codes(img) if len(codes) < 1: displayError(_("No QR codes found.")) else: self.receiptInput.text = codes[0] self.selectInputType('QR') App.get_running_app().curSearchPath = path except IOError: try: with open(full) as f: self.receiptInput.text = f.read().strip() except (IOError, UnicodeDecodeError) as e: displayError(e) self.dismissPopup()