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
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
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
def is_convertible(self, image): if not image.file_type.startswith('image'): # can only convert images return False return QtGui.QImageReader(image.path).canRead()