def imsave(filename, img, format_str=None): warn( '`qt` plugin is deprecated and will be removed in 0.20. ' 'For alternatives, refer to ' 'https://scikit-image.org/docs/stable/user_guide/visualization.html', FutureWarning, stacklevel=2) # we can add support for other than 3D uint8 here... img = prepare_for_display(img) qimg = QImage(img.data, img.shape[1], img.shape[0], img.strides[0], QImage.Format_RGB888) if _is_filelike(filename): byte_array = QtCore.QByteArray() qbuffer = QtCore.QBuffer(byte_array) qbuffer.open(QtCore.QIODevice.ReadWrite) saved = qimg.save(qbuffer, format_str.upper()) qbuffer.seek(0) filename.write(qbuffer.readAll().data()) qbuffer.close() else: saved = qimg.save(filename) if not saved: from textwrap import dedent msg = dedent('''The image was not saved. Allowable file formats for the QT imsave plugin are: BMP, JPG, JPEG, PNG, PPM, TIFF, XBM, XPM''') raise RuntimeError(msg)
def base64_from_icon_obj(self, icon_obj, width, height): """Convert icon object to base64 encoding.""" image = QImage(icon_obj.pixmap(width, height).toImage()) byte_array = QByteArray() buffer = QBuffer(byte_array) image.save(buffer, "PNG") return byte_array.toBase64().data().decode()
def create_thumbnail(name='./.thumbnail', model='tfm', geometry=False, chemistry=False, background=None): if background is not None and os.path.exists(background): img = QImage(background) base = img.scaled(300, 300).scaled(128, 128, Qt.IgnoreAspectRatio) else: base = QImage(QSize(128, 128), QImage.Format_ARGB32) base.fill(Qt.white) painter = QPainter(base) # add images model = QImage(get_image_path(model + '.svg')) painter.drawImage(0, 128 - 24, model) if geometry: geo = QImage(get_image_path('geometry.svg')) painter.drawImage(24, 128 - 24, geo) if chemistry: geo = QImage(get_image_path('chemistry.svg')) painter.drawImage(24 * 2, 128 - 24, geo) base.save(name, "PNG") del painter
def save_icon(self, image_path, project_path, project=None): """ Save a project icon based on a given image path. """ logger.debug(str((image_path, project_path, project))) from PIL.ImageQt import ImageQt from PIL import Image if project is None: project = self.load_project(project_path) if os.path.isfile(image_path): new_icon_path = os.sep.join([project_path, project.icon]) extension = image_path.split('.')[-1] with open(image_path, 'rb') as f: img = Image.open(f) img.thumbnail(IMAGE_ICON_SIZE) image = ImageQt(img) qt_image = QImage(image) if os.path.isfile(new_icon_path): os.remove(new_icon_path) try: qt_image.save(new_icon_path, format=extension) except Exception as err: print(err)
def imsave(filename, img, format_str=None): # we can add support for other than 3D uint8 here... img = prepare_for_display(img) qimg = QImage(img.data, img.shape[1], img.shape[0], img.strides[0], QImage.Format_RGB888) if _is_filelike(filename): byte_array = QtCore.QByteArray() qbuffer = QtCore.QBuffer(byte_array) qbuffer.open(QtCore.QIODevice.ReadWrite) saved = qimg.save(qbuffer, format_str.upper()) qbuffer.seek(0) filename.write(qbuffer.readAll().data()) qbuffer.close() else: saved = qimg.save(filename) if not saved: from textwrap import dedent msg = dedent('''The image was not saved. Allowable file formats for the QT imsave plugin are: BMP, JPG, JPEG, PNG, PPM, TIFF, XBM, XPM''') raise RuntimeError(msg)
def imsave(filename, img, format_str=None): # we can add support for other than 3D uint8 here... img = prepare_for_display(img) qimg = QImage(img.data, img.shape[1], img.shape[0], img.strides[0], QImage.Format_RGB888) if _is_filelike(filename): byte_array = QtCore.QByteArray() qbuffer = QtCore.QBuffer(byte_array) qbuffer.open(QtCore.QIODevice.ReadWrite) saved = qimg.save(qbuffer, format_str.upper()) qbuffer.seek(0) filename.write(qbuffer.readAll().data()) qbuffer.close() else: saved = qimg.save(filename) if not saved: from textwrap import dedent msg = dedent( '''The image was not saved. Allowable file formats for the QT imsave plugin are: BMP, JPG, JPEG, PNG, PPM, TIFF, XBM, XPM''') raise RuntimeError(msg)
def renderDocument(self, plot, filename, sizeMM=(300, 200), resolution=85, format_=None): """ Render a plot to a file The format of the document will be auto-detected from the suffix of the file name. :param qwt.plot.QwtPlot plot: Plot widget :param str fileName: Path of the file, where the document will be stored :param QSizeF sizeMM: Size for the document in millimeters :param int resolution: Resolution in dots per Inch (dpi) """ if isinstance(sizeMM, tuple): sizeMM = QSizeF(*sizeMM) if format_ is None: ext = osp.splitext(filename)[1] if not ext: raise TypeError( "Unable to determine target format from filename") format_ = ext[1:] if plot is None or sizeMM.isEmpty() or resolution <= 0: return title = plot.title().text() if not title: title = "Plot Document" mmToInch = 1.0 / 25.4 size = sizeMM * mmToInch * resolution documentRect = QRectF(0.0, 0.0, size.width(), size.height()) fmt = format_.lower() if fmt in ("pdf", "ps"): printer = QPrinter() if fmt == "pdf": printer.setOutputFormat(QPrinter.PdfFormat) else: printer.setOutputFormat(QPrinter.PostScriptFormat) printer.setColorMode(QPrinter.Color) printer.setFullPage(True) printer.setPaperSize(sizeMM, QPrinter.Millimeter) printer.setDocName(title) printer.setOutputFileName(filename) printer.setResolution(resolution) painter = QPainter(printer) self.render(plot, painter, documentRect) painter.end() elif fmt == "svg": generator = QSvgGenerator() generator.setTitle(title) generator.setFileName(filename) generator.setResolution(resolution) generator.setViewBox(documentRect) painter = QPainter(generator) self.render(plot, painter, documentRect) painter.end() elif fmt in QImageWriter.supportedImageFormats(): imageRect = documentRect.toRect() dotsPerMeter = int(round(resolution * mmToInch * 1000.0)) image = QImage(imageRect.size(), QImage.Format_ARGB32) image.setDotsPerMeterX(dotsPerMeter) image.setDotsPerMeterY(dotsPerMeter) image.fill(QColor(Qt.white).rgb()) painter = QPainter(image) self.render(plot, painter, imageRect) painter.end() image.save(filename, fmt) else: raise TypeError("Unsupported file format '%s'" % fmt)