예제 #1
0
 def get_qt_image(self):
     reader = QtGui.QImageReader(self.path)
     reader.setAutoTransform(False)
     qt_im = reader.read()
     if not qt_im or qt_im.isNull():
         logger.error('Image read: %s: %s', self.path, reader.errorString())
         return None
     w = qt_im.width()
     h = qt_im.height()
     if max(w, h) > 1000:
         # use Qt's scaling (not high quality) to pre-shrink large
         # images
         qt_im = qt_im.scaled(1000, 1000, Qt.KeepAspectRatio,
                              Qt.SmoothTransformation)
         w = qt_im.width()
         h = qt_im.height()
     # pad image to 4:3 (or 3:4) aspect ratio
     if w >= h:
         new_h = int(0.5 + (float(w * 3) / 4.0))
         new_w = int(0.5 + (float(h * 4) / 3.0))
     else:
         new_h = int(0.5 + (float(w * 4) / 3.0))
         new_w = int(0.5 + (float(h * 3) / 4.0))
     if new_w > w:
         pad = (new_w - w) // 2
         qt_im = qt_im.copy(-pad, 0, new_w, h)
     elif new_h > h:
         pad = (new_h - h) // 2
         qt_im = qt_im.copy(0, -pad, w, new_h)
     return qt_im
예제 #2
0
 def convert(value):
     if value['data'] and not value['image']:
         buf = QtCore.QBuffer()
         buf.setData(value['data'])
         reader = QtGui.QImageReader(buf)
         reader.setAutoTransform(False)
         value['fmt'] = reader.format().data().decode().upper()
         value['image'] = reader.read()
         if value['image'].isNull():
             logger.error('thumbnail: %s', reader.errorString())
             value['image'] = None
         # don't keep reference to what might be an entire image file
         value['data'] = None
     if value['image'] and not value['data']:
         buf = QtCore.QBuffer()
         buf.open(buf.WriteOnly)
         value['fmt'] = 'JPEG'
         value['image'].save(buf, value['fmt'])
         value['data'] = buf.data().data()
     if value['image']:
         value['w'] = value['image'].width()
         value['h'] = value['image'].height()
     else:
         value['w'] = 0
         value['h'] = 0
     return value
예제 #3
0
 def convert(value):
     if value['data'] and not value['image']:
         buf = QtCore.QBuffer()
         buf.setData(value['data'])
         reader = QtGui.QImageReader(buf)
         reader.setAutoTransform(False)
         value['fmt'] = reader.format().data().decode().upper()
         value['image'] = reader.read()
         if value['image'].isNull():
             logger.error('thumbnail: %s', reader.errorString())
             value['image'] = None
     if value['image']:
         value['w'] = value['image'].width()
         value['h'] = value['image'].height()
         if value['data'] and len(value['data']) >= 60000:
             # don't keep unusably large amount of data
             value['data'] = None
     else:
         value['w'] = 0
         value['h'] = 0
         value['data'] = None
     return value
예제 #4
0
 def is_convertible(self, image):
     if not image.file_type.startswith('image'):
         # can only convert images
         return False
     return QtGui.QImageReader(image.path).canRead()