diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py
index c72f1533a5..88c51d4e7f 100644
--- a/src/calibre/gui2/dialogs/metadata_bulk.py
+++ b/src/calibre/gui2/dialogs/metadata_bulk.py
@@ -204,6 +204,16 @@ class MyBlockingBusyNew(QDialog): # {{{
covers.sort(key=lambda x: x[1])
if covers:
cache.set_cover({book_id:covers[-1][0]})
+ elif args.cover_action == 'trim':
+ from calibre.utils.magick import Image
+ for book_id in self.ids:
+ cdata = cache.cover(book_id)
+ if cdata:
+ im = Image()
+ im.load(cdata)
+ im.trim(10)
+ cdata = im.export('png')
+ cache.set_cover({book_id:cdata})
# Formats
if args.do_remove_format:
@@ -1213,6 +1223,8 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog):
cover_action = 'generate'
elif self.cover_from_fmt.isChecked():
cover_action = 'fromfmt'
+ elif self.cover_trim.isChecked():
+ cover_action = 'trim'
args = Settings(remove_all, remove, add, au, aus, do_aus, rating, pub, do_series,
do_autonumber, do_remove_format, remove_format, do_swap_ta,
diff --git a/src/calibre/gui2/dialogs/metadata_bulk.ui b/src/calibre/gui2/dialogs/metadata_bulk.ui
index 2b48e635be..afc5e55449 100644
--- a/src/calibre/gui2/dialogs/metadata_bulk.ui
+++ b/src/calibre/gui2/dialogs/metadata_bulk.ui
@@ -603,6 +603,13 @@ Future conversion of these books will use the default settings.
+ -
+
+
+ &Trim cover
+
+
+
-