From 147d11f1ea6c100098fc027222059c2dffbeec40 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 5 Apr 2015 08:02:23 +0530 Subject: [PATCH] Edit Book: Fix GIF images being corrupted when using the builtin image editor to make changes to them. Fixes #1440398 [Editor: Rotating a gif destroys it](https://bugs.launchpad.net/calibre/+bug/1440398) --- src/calibre/gui2/tweak_book/editor/canvas.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/tweak_book/editor/canvas.py b/src/calibre/gui2/tweak_book/editor/canvas.py index a12681b302..87778b3ad2 100644 --- a/src/calibre/gui2/tweak_book/editor/canvas.py +++ b/src/calibre/gui2/tweak_book/editor/canvas.py @@ -11,7 +11,8 @@ from functools import wraps from PyQt5.Qt import ( QWidget, QPainter, QColor, QApplication, Qt, QPixmap, QRectF, QTransform, - QPointF, QPen, pyqtSignal, QUndoCommand, QUndoStack, QIcon, QImage, QByteArray) + QPointF, QPen, pyqtSignal, QUndoCommand, QUndoStack, QIcon, QImage, + QByteArray, QImageWriter) from calibre import fit_image from calibre.gui2 import error_dialog, pixmap_to_data @@ -336,7 +337,10 @@ class Canvas(QWidget): def get_image_data(self, quality=90): if not self.is_modified: return self.original_image_data - return pixmap_to_data(self.current_image, format=self.original_image_format or 'JPEG', quality=90) + fmt = self.original_image_format or 'JPEG' + if fmt.lower() not in set(map(lambda x:bytes(x).decode('ascii'), QImageWriter.supportedImageFormats())): + return qimage_to_magick(self.current_image).export(fmt) + return pixmap_to_data(self.current_image, format=fmt, quality=90) def copy(self): if not self.is_valid: