diff --git a/resources/default_tweaks.py b/resources/default_tweaks.py index d8e158f842..a4d3a5b540 100644 --- a/resources/default_tweaks.py +++ b/resources/default_tweaks.py @@ -385,6 +385,12 @@ sort_dates_using_visible_fields = False generate_cover_title_font = None generate_cover_foot_font = None +#: Fuzz value for trimming covers +# The value used for the fuzz distance when trimming a cover. +# Colors within this distance are considered equal. +# The distance is in absolute intensity units. +cover_trim_fuzz_value = 10 + #: Control behavior of the book list # You can control the behavior of doubleclicks on the books list. # Choices: open_viewer, do_nothing, diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py index c72f1533a5..5f6d3bcc3a 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(tweaks['cover_trim_fuzz_value']) + cdata = im.export('jpg') + cache.set_cover({book_id:cdata}) # Formats if args.do_remove_format: @@ -423,6 +433,15 @@ class MyBlockingBusy(QDialog): # {{{ if covers: self.db.set_cover(id, covers[-1][0]) covers = [] + elif cover_action == 'trim': + from calibre.utils.magick import Image + cdata = self.db.cover(id, index_is_id=True) + if cdata: + im = Image() + im.load(cdata) + im.trim(tweaks['cover_trim_fuzz_value']) + cdata = im.export('jpg') + self.db.set_cover(id, cdata) if do_remove_format: self.db.remove_format(id, remove_format, index_is_id=True, @@ -1213,6 +1232,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 + + + diff --git a/src/calibre/gui2/metadata/basic_widgets.py b/src/calibre/gui2/metadata/basic_widgets.py index 3d1a439deb..b7bb0252ef 100644 --- a/src/calibre/gui2/metadata/basic_widgets.py +++ b/src/calibre/gui2/metadata/basic_widgets.py @@ -971,7 +971,7 @@ class Cover(ImageView): # {{{ return im = Image() im.load(cdata) - im.trim(10) + im.trim(tweaks['cover_trim_fuzz_value']) cdata = im.export('png') self.current_val = cdata