def __cssLinkClass(self, icon, size=32): """ Private method to generate a link class with an icon. @param icon icon to be included (QIcon) @param size size of the icon to be generated (integer) @return CSS class string (string) """ cssString = \ """a.{{0}} {{{{\n"""\ """ padding-left: {0}px;\n"""\ """ background: transparent url(data:image/png;base64,{1})"""\ """ no-repeat center left;\n"""\ """ font-weight: bold;\n"""\ """}}}}\n""" pixmap = icon.pixmap(size, size) imageBuffer = QBuffer() imageBuffer.open(QIODevice.ReadWrite) if not pixmap.save(imageBuffer, "PNG"): # write a blank pixmap on error pixmap = QPixmap(size, size) pixmap.fill(Qt.transparent) imageBuffer.buffer().clear() pixmap.save(imageBuffer, "PNG") return cssString.format( size + 4, str(imageBuffer.buffer().toBase64(), encoding="ascii"))
def saveBookInfo(self): selected_items = self.treeFileList.selectedItems() if len(selected_items) == 1: QApplication.setOverrideCursor(Qt.BusyCursor) item = selected_items[0] meta = EbookMeta(item.text(2)) meta.get() if self.book_cover: data = QByteArray() buf = QBuffer(data) self.book_cover.save(buf, 'JPG') meta.coverdata = bytes(buf.buffer()) if not meta.coverpage: meta.coverpage = 'cover.jpg' meta.coverpage_href = '{http://www.w3.org/1999/xlink}href' else: meta.coverpage = '' meta.coverdata = None meta.set_authors(self.editAuthor.text()) meta.book_title = self.editTitle.text() meta.set_series(self.editSeries.text(), self.editSeriesNumber.text()) meta.lang = self.editBookLanguage.text() meta.write() item.setText(0, meta.book_title) item.setText(1, meta.get_autors()) QApplication.restoreOverrideCursor() elif len(selected_items) > 1: msg = QMessageBox(self) msg.setIcon(QMessageBox.Question) msg.setWindowTitle(_translate('fb2mobi', 'Save')) msg.setText(_translate('fb2mobi', 'Save changes in selected files?')) msg.setStandardButtons(QMessageBox.Save | QMessageBox.Cancel) if msg.exec_() == QMessageBox.Save: QApplication.setOverrideCursor(Qt.BusyCursor) for item in selected_items: meta = EbookMeta(item.text(2)) meta.get() (series, series_number) = meta.get_first_series() authors = meta.get_autors() if self.editAuthor.text(): authors = self.editAuthor.text() if self.editSeries.text(): series = self.editSeries.text() meta.set_authors(authors) meta.set_series(series, series_number) if self.editBookLanguage.text(): meta.lang = self.editBookLanguage.text() meta.write() item.setText(0, meta.book_title) item.setText(1, meta.get_autors()) QApplication.restoreOverrideCursor()
def render_to_bytes(self, res): """Renders the image into an object of type 'str'""" qt_format = self.format # this may not be constant due to processEvents() image = self.render(res) q_buffer = QBuffer() image.save(q_buffer, qt_format) return q_buffer.buffer().data()
def loadCoverFromFile(self, file): if os.path.exists(file): cover_pixmap = QPixmap() if cover_pixmap.load(file): data = QByteArray() buf = QBuffer(data) cover_pixmap.save(buf, 'JPG') self.booksMeta[0].cover_image_data = bytes(buf.buffer()) self.booksMeta[0].cover_image_name = 'cover.jpg' self.setBookCover(self.booksMeta[0].cover_image_data)
def render_to_file(self, res, file_object): """ Renders the image into a File resource. Returns the size of the data that has been written. """ qt_format = self.format # this may not be constant due to processEvents() image = self.render(res) q_buffer = QBuffer() image.save(q_buffer, qt_format) output = q_buffer.buffer().data() if type(file_object) is not _io.BufferedRandom: output = str(output) file_object.write(output) return q_buffer.size()
def setImage(self, image): """ Public method to set the image of the engine. @param image image to be set (QImage) """ if not self._imageUrl: imageBuffer = QBuffer() imageBuffer.open(QIODevice.ReadWrite) if image.save(imageBuffer, "PNG"): self._imageUrl = "data:image/png;base64,{0}".format( bytes(imageBuffer.buffer().toBase64()).decode()) self.__image = QImage(image) self.imageChanged.emit()
def grab_svg(scene): """ Return a SVG rendering of the scene contents. Parameters ---------- scene : :class:`CanvasScene` """ from PyQt5.QtSvg import QSvgGenerator svg_buffer = QBuffer() gen = QSvgGenerator() gen.setOutputDevice(svg_buffer) items_rect = scene.itemsBoundingRect().adjusted(-10, -10, 10, 10) if items_rect.isNull(): items_rect = QRectF(0, 0, 10, 10) width, height = items_rect.width(), items_rect.height() rect_ratio = float(width) / height # Keep a fixed aspect ratio. aspect_ratio = 1.618 if rect_ratio > aspect_ratio: height = int(height * rect_ratio / aspect_ratio) else: width = int(width * aspect_ratio / rect_ratio) target_rect = QRectF(0, 0, width, height) source_rect = QRectF(0, 0, width, height) source_rect.moveCenter(items_rect.center()) gen.setSize(target_rect.size().toSize()) gen.setViewBox(target_rect) painter = QPainter(gen) # Draw background. painter.setBrush(QBrush(Qt.white)) painter.drawRect(target_rect) # Render the scene scene.render(painter, target_rect, source_rect) painter.end() buffer_str = bytes(svg_buffer.buffer()) return buffer_str.decode("utf-8")