diff --git a/picard/coverart/processing/processors.py b/picard/coverart/processing/processors.py index 7bb3ee819..c3b267983 100644 --- a/picard/coverart/processing/processors.py +++ b/picard/coverart/processing/processors.py @@ -35,31 +35,48 @@ class ResizeImage(ImageProcessor): def save_to_file(self): config = get_config() - return config.setting['resize_images_saved_to_file'] + return config.setting['cover_file_scale_down'] or config.setting['cover_file_scale_up'] def save_to_tags(self): config = get_config() - return config.setting['resize_images_saved_to_tags'] + return config.setting['cover_tags_scale_down'] or config.setting['cover_tags_scale_up'] def same_processing(self): - config = get_config() - same_width = config.setting['cover_tags_maximum_width'] == config.setting['cover_file_maximum_width'] - same_height = config.setting['cover_tags_maximum_height'] == config.setting['cover_file_maximum_height'] - return self.save_to_tags and self.save_to_file and same_width and same_height + setting = get_config().setting + same_up = setting['cover_file_scale_up'] == setting['cover_tags_scale_up'] + same_down = setting['cover_file_scale_down'] == setting['cover_tags_scale_down'] + same_width = setting['cover_file_resize_use_width'] == setting['cover_tags_resize_use_width'] + if setting['cover_file_resize_use_width'] and setting['cover_tags_resize_use_width']: + same_width = setting['cover_file_resize_target_width'] == setting['cover_tags_resize_target_width'] + same_height = setting['cover_file_resize_use_height'] == setting['cover_tags_resize_use_height'] + if setting['cover_file_resize_use_height'] and setting['cover_tags_resize_use_height']: + same_height = setting['cover_file_resize_target_height'] == setting['cover_tags_resize_target_height'] + return same_up and same_down and same_width and same_height and self.save_to_file() and self.save_to_tags() - def run(self, image, target): - start_time = time.time() + def _find_target_size(self, image, target): config = get_config() + target_width = image.info.width + target_height = image.info.height if target == ProcessingTarget.TAGS: - max_width = config.setting['cover_tags_maximum_width'] - max_height = config.setting['cover_tags_maximum_height'] + if config.setting['cover_tags_resize_use_width']: + target_width = config.setting['cover_tags_resize_target_width'] + if config.setting['cover_tags_resize_use_height']: + target_height = config.setting['cover_tags_resize_target_height'] + scaling_up = config.setting['cover_tags_scale_up'] + scaling_down = config.setting['cover_tags_scale_down'] else: - max_width = config.setting['cover_file_maximum_width'] - max_height = config.setting['cover_file_maximum_height'] - if image.info.width <= max_width and image.info.height <= max_height: - return + if config.setting['cover_file_resize_use_width']: + target_width = config.setting['cover_file_resize_target_width'] + if config.setting['cover_file_resize_use_height']: + target_height = config.setting['cover_file_resize_target_height'] + scaling_up = config.setting['cover_file_scale_up'] + scaling_down = config.setting['cover_file_scale_down'] + return target_width, target_height, scaling_up, scaling_down + + def _resize_image(self, image, target_width, target_height, aspect_ratio): + start_time = time.time() qimage = image.get_result() - scaled_image = qimage.scaled(max_width, max_height, Qt.AspectRatioMode.KeepAspectRatio) + scaled_image = qimage.scaled(target_width, target_height, aspect_ratio) log.debug( "Resized cover art from %d x %d to %d x %d in %.2f ms", image.info.width, @@ -73,5 +90,16 @@ class ResizeImage(ImageProcessor): image.info.datalen = scaled_image.sizeInBytes() image.set_result(scaled_image) + def run(self, image, target): + target_width, target_height, scaling_up, scaling_down = self._find_target_size(image, target) + if scaling_down and (image.info.width > target_width or image.info.height > target_height): + aspect_ratio = Qt.AspectRatioMode.KeepAspectRatio + elif scaling_up and (image.info.width < target_width or image.info.height < target_height): + aspect_ratio = Qt.AspectRatioMode.KeepAspectRatioByExpanding + else: + # no resizing is needed + return + self._resize_image(image, target_width, target_height, aspect_ratio) + register_cover_art_processor(ResizeImage) diff --git a/picard/extension_points/cover_art_processors.py b/picard/extension_points/cover_art_processors.py index fa14404c2..e7456f26f 100644 --- a/picard/extension_points/cover_art_processors.py +++ b/picard/extension_points/cover_art_processors.py @@ -86,7 +86,7 @@ class ImageProcessor: def same_processing(self): return False - def run(self, data, target): + def run(self, image, target): pass diff --git a/picard/options.py b/picard/options.py index f2969c83c..ebe11edf5 100644 --- a/picard/options.py +++ b/picard/options.py @@ -175,12 +175,18 @@ BoolOption('setting', 'save_only_one_front_image', False, title=N_("Save only a BoolOption('setting', 'filter_cover_by_size', False) IntOption('setting', 'cover_minimum_width', DEFAULT_COVER_MIN_SIZE) IntOption('setting', 'cover_minimum_height', DEFAULT_COVER_MIN_SIZE) -BoolOption('setting', 'resize_images_saved_to_tags', False) -IntOption('setting', 'cover_tags_maximum_width', DEFAULT_COVER_MAX_SIZE) -IntOption('setting', 'cover_tags_maximum_height', DEFAULT_COVER_MAX_SIZE) -BoolOption('setting', 'resize_images_saved_to_file', False) -IntOption('setting', 'cover_file_maximum_width', DEFAULT_COVER_MAX_SIZE) -IntOption('setting', 'cover_file_maximum_height', DEFAULT_COVER_MAX_SIZE) +BoolOption('setting', 'cover_tags_scale_up', False) +BoolOption('setting', 'cover_tags_scale_down', False) +BoolOption('setting', 'cover_tags_resize_use_width', True) +IntOption('setting', 'cover_tags_resize_target_width', DEFAULT_COVER_MAX_SIZE) +BoolOption('setting', 'cover_tags_resize_use_height', True) +IntOption('setting', 'cover_tags_resize_target_height', DEFAULT_COVER_MAX_SIZE) +BoolOption('setting', 'cover_file_scale_up', False) +BoolOption('setting', 'cover_file_scale_down', False) +BoolOption('setting', 'cover_file_resize_use_width', True) +IntOption('setting', 'cover_file_resize_target_width', DEFAULT_COVER_MAX_SIZE) +BoolOption('setting', 'cover_file_resize_use_height', True) +IntOption('setting', 'cover_file_resize_target_height', DEFAULT_COVER_MAX_SIZE) # picard/ui/options/dialog.py # Attached Profiles diff --git a/picard/ui/forms/ui_options_cover_processing.py b/picard/ui/forms/ui_options_cover_processing.py index c47f6eacd..6007c8af6 100644 --- a/picard/ui/forms/ui_options_cover_processing.py +++ b/picard/ui/forms/ui_options_cover_processing.py @@ -17,7 +17,7 @@ from picard.i18n import gettext as _ class Ui_CoverProcessingOptionsPage(object): def setupUi(self, CoverProcessingOptionsPage): CoverProcessingOptionsPage.setObjectName("CoverProcessingOptionsPage") - CoverProcessingOptionsPage.resize(518, 285) + CoverProcessingOptionsPage.resize(478, 361) self.verticalLayout = QtWidgets.QVBoxLayout(CoverProcessingOptionsPage) self.verticalLayout.setObjectName("verticalLayout") self.filtering = QtWidgets.QGroupBox(parent=CoverProcessingOptionsPage) @@ -88,30 +88,42 @@ class Ui_CoverProcessingOptionsPage(object): self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.resizing) self.horizontalLayout_7.setObjectName("horizontalLayout_7") self.save_to_tags = QtWidgets.QGroupBox(parent=self.resizing) - self.save_to_tags.setCheckable(True) + self.save_to_tags.setCheckable(False) self.save_to_tags.setChecked(False) self.save_to_tags.setObjectName("save_to_tags") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.save_to_tags) self.verticalLayout_3.setObjectName("verticalLayout_3") + self.tags_scale_widget = QtWidgets.QWidget(parent=self.save_to_tags) + self.tags_scale_widget.setObjectName("tags_scale_widget") + self.horizontalLayout_8 = QtWidgets.QHBoxLayout(self.tags_scale_widget) + self.horizontalLayout_8.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_8.setObjectName("horizontalLayout_8") + self.tags_scale_up = QtWidgets.QCheckBox(parent=self.tags_scale_widget) + self.tags_scale_up.setObjectName("tags_scale_up") + self.horizontalLayout_8.addWidget(self.tags_scale_up) + self.tags_scale_down = QtWidgets.QCheckBox(parent=self.tags_scale_widget) + self.tags_scale_down.setObjectName("tags_scale_down") + self.horizontalLayout_8.addWidget(self.tags_scale_down) + self.verticalLayout_3.addWidget(self.tags_scale_widget) self.tags_resize_width_widget = QtWidgets.QWidget(parent=self.save_to_tags) self.tags_resize_width_widget.setObjectName("tags_resize_width_widget") self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.tags_resize_width_widget) self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_5.setSpacing(4) self.horizontalLayout_5.setObjectName("horizontalLayout_5") - self.tags_resized_width_label = QtWidgets.QLabel(parent=self.tags_resize_width_widget) - self.tags_resized_width_label.setObjectName("tags_resized_width_label") - self.horizontalLayout_5.addWidget(self.tags_resized_width_label) - self.tags_resized_width_value = QtWidgets.QSpinBox(parent=self.tags_resize_width_widget) + self.tags_resize_width_label = QtWidgets.QCheckBox(parent=self.tags_resize_width_widget) + self.tags_resize_width_label.setObjectName("tags_resize_width_label") + self.horizontalLayout_5.addWidget(self.tags_resize_width_label) + self.tags_resize_width_value = QtWidgets.QSpinBox(parent=self.tags_resize_width_widget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.tags_resized_width_value.sizePolicy().hasHeightForWidth()) - self.tags_resized_width_value.setSizePolicy(sizePolicy) - self.tags_resized_width_value.setMaximum(9999) - self.tags_resized_width_value.setProperty("value", 1000) - self.tags_resized_width_value.setObjectName("tags_resized_width_value") - self.horizontalLayout_5.addWidget(self.tags_resized_width_value) + sizePolicy.setHeightForWidth(self.tags_resize_width_value.sizePolicy().hasHeightForWidth()) + self.tags_resize_width_value.setSizePolicy(sizePolicy) + self.tags_resize_width_value.setMaximum(9999) + self.tags_resize_width_value.setProperty("value", 1000) + self.tags_resize_width_value.setObjectName("tags_resize_width_value") + self.horizontalLayout_5.addWidget(self.tags_resize_width_value) self.px_label5 = QtWidgets.QLabel(parent=self.tags_resize_width_widget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Preferred) sizePolicy.setHorizontalStretch(0) @@ -127,19 +139,19 @@ class Ui_CoverProcessingOptionsPage(object): self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_3.setSpacing(4) self.horizontalLayout_3.setObjectName("horizontalLayout_3") - self.tags_resized_height_label = QtWidgets.QLabel(parent=self.tags_resize_height_widget) - self.tags_resized_height_label.setObjectName("tags_resized_height_label") - self.horizontalLayout_3.addWidget(self.tags_resized_height_label) - self.tags_resized_height_value = QtWidgets.QSpinBox(parent=self.tags_resize_height_widget) + self.tags_resize_height_label = QtWidgets.QCheckBox(parent=self.tags_resize_height_widget) + self.tags_resize_height_label.setObjectName("tags_resize_height_label") + self.horizontalLayout_3.addWidget(self.tags_resize_height_label) + self.tags_resize_height_value = QtWidgets.QSpinBox(parent=self.tags_resize_height_widget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.tags_resized_height_value.sizePolicy().hasHeightForWidth()) - self.tags_resized_height_value.setSizePolicy(sizePolicy) - self.tags_resized_height_value.setMaximum(9999) - self.tags_resized_height_value.setProperty("value", 1000) - self.tags_resized_height_value.setObjectName("tags_resized_height_value") - self.horizontalLayout_3.addWidget(self.tags_resized_height_value) + sizePolicy.setHeightForWidth(self.tags_resize_height_value.sizePolicy().hasHeightForWidth()) + self.tags_resize_height_value.setSizePolicy(sizePolicy) + self.tags_resize_height_value.setMaximum(9999) + self.tags_resize_height_value.setProperty("value", 1000) + self.tags_resize_height_value.setObjectName("tags_resize_height_value") + self.horizontalLayout_3.addWidget(self.tags_resize_height_value) self.px_label6 = QtWidgets.QLabel(parent=self.tags_resize_height_widget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Preferred) sizePolicy.setHorizontalStretch(0) @@ -151,30 +163,42 @@ class Ui_CoverProcessingOptionsPage(object): self.verticalLayout_3.addWidget(self.tags_resize_height_widget) self.horizontalLayout_7.addWidget(self.save_to_tags) self.save_to_file = QtWidgets.QGroupBox(parent=self.resizing) - self.save_to_file.setCheckable(True) + self.save_to_file.setCheckable(False) self.save_to_file.setChecked(False) self.save_to_file.setObjectName("save_to_file") self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.save_to_file) self.verticalLayout_4.setObjectName("verticalLayout_4") + self.file_scale_widget = QtWidgets.QWidget(parent=self.save_to_file) + self.file_scale_widget.setObjectName("file_scale_widget") + self.horizontalLayout_9 = QtWidgets.QHBoxLayout(self.file_scale_widget) + self.horizontalLayout_9.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_9.setObjectName("horizontalLayout_9") + self.file_scale_up = QtWidgets.QCheckBox(parent=self.file_scale_widget) + self.file_scale_up.setObjectName("file_scale_up") + self.horizontalLayout_9.addWidget(self.file_scale_up) + self.file_scale_down = QtWidgets.QCheckBox(parent=self.file_scale_widget) + self.file_scale_down.setObjectName("file_scale_down") + self.horizontalLayout_9.addWidget(self.file_scale_down) + self.verticalLayout_4.addWidget(self.file_scale_widget) self.file_resize_width_widget = QtWidgets.QWidget(parent=self.save_to_file) self.file_resize_width_widget.setObjectName("file_resize_width_widget") self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.file_resize_width_widget) self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_6.setSpacing(4) self.horizontalLayout_6.setObjectName("horizontalLayout_6") - self.file_resized_width_label = QtWidgets.QLabel(parent=self.file_resize_width_widget) - self.file_resized_width_label.setObjectName("file_resized_width_label") - self.horizontalLayout_6.addWidget(self.file_resized_width_label) - self.file_resized_width_value = QtWidgets.QSpinBox(parent=self.file_resize_width_widget) + self.file_resize_width_label = QtWidgets.QCheckBox(parent=self.file_resize_width_widget) + self.file_resize_width_label.setObjectName("file_resize_width_label") + self.horizontalLayout_6.addWidget(self.file_resize_width_label) + self.file_resize_width_value = QtWidgets.QSpinBox(parent=self.file_resize_width_widget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.file_resized_width_value.sizePolicy().hasHeightForWidth()) - self.file_resized_width_value.setSizePolicy(sizePolicy) - self.file_resized_width_value.setMaximum(9999) - self.file_resized_width_value.setProperty("value", 1000) - self.file_resized_width_value.setObjectName("file_resized_width_value") - self.horizontalLayout_6.addWidget(self.file_resized_width_value) + sizePolicy.setHeightForWidth(self.file_resize_width_value.sizePolicy().hasHeightForWidth()) + self.file_resize_width_value.setSizePolicy(sizePolicy) + self.file_resize_width_value.setMaximum(9999) + self.file_resize_width_value.setProperty("value", 1000) + self.file_resize_width_value.setObjectName("file_resize_width_value") + self.horizontalLayout_6.addWidget(self.file_resize_width_value) self.px_label3 = QtWidgets.QLabel(parent=self.file_resize_width_widget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Preferred) sizePolicy.setHorizontalStretch(0) @@ -190,19 +214,19 @@ class Ui_CoverProcessingOptionsPage(object): self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_4.setSpacing(4) self.horizontalLayout_4.setObjectName("horizontalLayout_4") - self.file_resized_height_label = QtWidgets.QLabel(parent=self.file_resize_height_widget) - self.file_resized_height_label.setObjectName("file_resized_height_label") - self.horizontalLayout_4.addWidget(self.file_resized_height_label) - self.file_resized_height_value = QtWidgets.QSpinBox(parent=self.file_resize_height_widget) + self.file_resize_height_label = QtWidgets.QCheckBox(parent=self.file_resize_height_widget) + self.file_resize_height_label.setObjectName("file_resize_height_label") + self.horizontalLayout_4.addWidget(self.file_resize_height_label) + self.file_resize_height_value = QtWidgets.QSpinBox(parent=self.file_resize_height_widget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.file_resized_height_value.sizePolicy().hasHeightForWidth()) - self.file_resized_height_value.setSizePolicy(sizePolicy) - self.file_resized_height_value.setMaximum(9999) - self.file_resized_height_value.setProperty("value", 1000) - self.file_resized_height_value.setObjectName("file_resized_height_value") - self.horizontalLayout_4.addWidget(self.file_resized_height_value) + sizePolicy.setHeightForWidth(self.file_resize_height_value.sizePolicy().hasHeightForWidth()) + self.file_resize_height_value.setSizePolicy(sizePolicy) + self.file_resize_height_value.setMaximum(9999) + self.file_resize_height_value.setProperty("value", 1000) + self.file_resize_height_value.setObjectName("file_resize_height_value") + self.horizontalLayout_4.addWidget(self.file_resize_height_value) self.px_label4 = QtWidgets.QLabel(parent=self.file_resize_height_widget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Preferred) sizePolicy.setHorizontalStretch(0) @@ -229,12 +253,16 @@ class Ui_CoverProcessingOptionsPage(object): self.px_label2.setText(_("px")) self.resizing.setTitle(_("Resize images if above the given size")) self.save_to_tags.setTitle(_("Resize images saved to tags ")) - self.tags_resized_width_label.setText(_("Maximum width:")) + self.tags_scale_up.setText(_("Scale up")) + self.tags_scale_down.setText(_("Scale down")) + self.tags_resize_width_label.setText(_("Width:")) self.px_label5.setText(_("px")) - self.tags_resized_height_label.setText(_("Maximum height:")) + self.tags_resize_height_label.setText(_("Height:")) self.px_label6.setText(_("px")) self.save_to_file.setTitle(_("Resize images saved to files")) - self.file_resized_width_label.setText(_("Maximum width:")) + self.file_scale_up.setText(_("Scale up")) + self.file_scale_down.setText(_("Scale down")) + self.file_resize_width_label.setText(_("Width:")) self.px_label3.setText(_("px")) - self.file_resized_height_label.setText(_("Maximum height:")) + self.file_resize_height_label.setText(_("Height:")) self.px_label4.setText(_("px")) diff --git a/picard/ui/options/cover_processing.py b/picard/ui/options/cover_processing.py index c4b240a31..27d33f83f 100644 --- a/picard/ui/options/cover_processing.py +++ b/picard/ui/options/cover_processing.py @@ -42,36 +42,54 @@ class CoverProcessingOptionsPage(OptionsPage): self.register_setting('filter_cover_by_size') self.register_setting('cover_minimum_width') self.register_setting('cover_minimum_height') - self.register_setting('resize_images_saved_to_tags') - self.register_setting('cover_tags_maximum_width') - self.register_setting('cover_tags_maximum_height') - self.register_setting('resize_images_saved_to_file') - self.register_setting('cover_file_maximum_width') - self.register_setting('cover_file_maximum_height') + self.register_setting('cover_tags_scale_up') + self.register_setting('cover_tags_scale_down') + self.register_setting('cover_tags_resize_use_width') + self.register_setting('cover_tags_resize_target_width') + self.register_setting('cover_tags_resize_use_height') + self.register_setting('cover_tags_resize_target_height') + self.register_setting('cover_file_scale_up') + self.register_setting('cover_file_scale_down') + self.register_setting('cover_file_resize_use_width') + self.register_setting('cover_file_resize_target_width') + self.register_setting('cover_file_resize_use_height') + self.register_setting('cover_file_resize_target_height') def load(self): config = get_config() self.ui.filtering.setChecked(config.setting['filter_cover_by_size']) self.ui.filtering_width_value.setValue(config.setting['cover_minimum_width']) self.ui.filtering_height_value.setValue(config.setting['cover_minimum_height']) - self.ui.save_to_tags.setChecked(config.setting['resize_images_saved_to_tags']) - self.ui.tags_resized_width_value.setValue(config.setting['cover_tags_maximum_width']) - self.ui.tags_resized_height_value.setValue(config.setting['cover_tags_maximum_height']) - self.ui.save_to_file.setChecked(config.setting['resize_images_saved_to_file']) - self.ui.file_resized_width_value.setValue(config.setting['cover_file_maximum_width']) - self.ui.file_resized_height_value.setValue(config.setting['cover_file_maximum_height']) + self.ui.tags_scale_up.setChecked(config.setting['cover_tags_scale_up']) + self.ui.tags_scale_down.setChecked(config.setting['cover_tags_scale_down']) + self.ui.tags_resize_width_label.setChecked(config.setting['cover_tags_resize_use_width']) + self.ui.tags_resize_width_value.setValue(config.setting['cover_tags_resize_target_width']) + self.ui.tags_resize_height_label.setChecked(config.setting['cover_tags_resize_use_height']) + self.ui.tags_resize_height_value.setValue(config.setting['cover_tags_resize_target_height']) + self.ui.file_scale_up.setChecked(config.setting['cover_file_scale_up']) + self.ui.file_scale_down.setChecked(config.setting['cover_file_scale_down']) + self.ui.file_resize_width_label.setChecked(config.setting['cover_file_resize_use_width']) + self.ui.file_resize_width_value.setValue(config.setting['cover_file_resize_target_width']) + self.ui.file_resize_height_label.setChecked(config.setting['cover_file_resize_use_height']) + self.ui.file_resize_height_value.setValue(config.setting['cover_file_resize_target_height']) def save(self): config = get_config() config.setting['filter_cover_by_size'] = self.ui.filtering.isChecked() config.setting['cover_minimum_width'] = self.ui.filtering_width_value.value() config.setting['cover_minimum_height'] = self.ui.filtering_height_value.value() - config.setting['resize_images_saved_to_tags'] = self.ui.save_to_tags.isChecked() - config.setting['cover_tags_maximum_width'] = self.ui.tags_resized_width_value.value() - config.setting['cover_tags_maximum_height'] = self.ui.tags_resized_height_value.value() - config.setting['resize_images_saved_to_file'] = self.ui.save_to_file.isChecked() - config.setting['cover_file_maximum_width'] = self.ui.file_resized_width_value.value() - config.setting['cover_file_maximum_height'] = self.ui.file_resized_height_value.value() + config.setting['cover_tags_scale_up'] = self.ui.tags_scale_up.isChecked() + config.setting['cover_tags_scale_down'] = self.ui.tags_scale_down.isChecked() + config.setting['cover_tags_resize_use_width'] = self.ui.tags_resize_width_label.isChecked() + config.setting['cover_tags_resize_target_width'] = self.ui.tags_resize_width_value.value() + config.setting['cover_tags_resize_use_height'] = self.ui.tags_resize_height_label.isChecked() + config.setting['cover_tags_resize_target_height'] = self.ui.tags_resize_height_value.value() + config.setting['cover_file_scale_up'] = self.ui.file_scale_up.isChecked() + config.setting['cover_file_scale_down'] = self.ui.file_scale_down.isChecked() + config.setting['cover_file_resize_use_width'] = self.ui.file_resize_width_label.isChecked() + config.setting['cover_file_resize_target_width'] = self.ui.file_resize_width_value.value() + config.setting['cover_file_resize_use_height'] = self.ui.file_resize_height_label.isChecked() + config.setting['cover_file_resize_target_height'] = self.ui.file_resize_height_value.value() register_options_page(CoverProcessingOptionsPage) diff --git a/test/test_coverart_processing.py b/test/test_coverart_processing.py index 22bf90f92..051d10e36 100644 --- a/test/test_coverart_processing.py +++ b/test/test_coverart_processing.py @@ -80,12 +80,18 @@ class ImageProcessorsTest(PicardTestCase): super().setUp() self.settings = { 'enabled_plugins': [], - 'resize_images_saved_to_tags': True, - 'cover_tags_maximum_width': 500, - 'cover_tags_maximum_height': 500, - 'resize_images_saved_to_file': True, - 'cover_file_maximum_width': 750, - 'cover_file_maximum_height': 750, + 'cover_tags_scale_up': False, + 'cover_tags_scale_down': True, + 'cover_tags_resize_use_width': True, + 'cover_tags_resize_target_width': 500, + 'cover_tags_resize_use_height': True, + 'cover_tags_resize_target_height': 500, + 'cover_file_scale_up': False, + 'cover_file_scale_down': True, + 'cover_file_resize_use_width': True, + 'cover_file_resize_target_width': 750, + 'cover_file_resize_use_height': True, + 'cover_file_resize_target_height': 750, 'save_images_to_tags': True, 'save_images_to_files': True, } diff --git a/ui/options_cover_processing.ui b/ui/options_cover_processing.ui index 75d95803a..0943b8523 100644 --- a/ui/options_cover_processing.ui +++ b/ui/options_cover_processing.ui @@ -6,8 +6,8 @@ 0 0 - 518 - 285 + 478 + 361 @@ -155,12 +155,44 @@ Resize images saved to tags - true + false false + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Scale up + + + + + + + Scale down + + + + + + @@ -180,14 +212,14 @@ 0 - + - Maximum width: + Width: - + 0 @@ -237,14 +269,14 @@ 0 - + - Maximum height: + Height: - + 0 @@ -284,12 +316,44 @@ Resize images saved to files - true + false false + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Scale up + + + + + + + Scale down + + + + + + @@ -309,14 +373,14 @@ 0 - + - Maximum width: + Width: - + 0 @@ -366,14 +430,14 @@ 0 - + - Maximum height: + Height: - + 0