diff --git a/picard/coverart/__init__.py b/picard/coverart/__init__.py index 2cf5f009b..e3b4efe6a 100644 --- a/picard/coverart/__init__.py +++ b/picard/coverart/__init__.py @@ -74,10 +74,10 @@ class CoverArt: else: log.debug("Cover art disabled by user options.") - def _set_metadata(self, coverartimage, data): + def _set_metadata(self, coverartimage, data, info): try: if coverartimage.can_be_processed: - run_image_processors(data, coverartimage) + run_image_processors(coverartimage, data, info) else: coverartimage.set_tags_data(data) if coverartimage.can_be_saved_to_metadata: @@ -102,20 +102,16 @@ class CoverArt: self.album.error_append(e) def _should_save_image(self, coverartimage, data, info): - log.warning("image save check") config = get_config() if config.setting['dont_replace_with_smaller_cover']: downloaded_types = coverartimage.normalized_types() - log.warning(downloaded_types) - log.warning(self.previous_images.keys()) if downloaded_types in self.previous_images: previous_image = self.previous_images[downloaded_types] - log.warning(previous_image) if info.width < previous_image.width or info.height < previous_image.height: log.debug("Discarding cover art. A bigger image with the same types is already embedded.") return False if coverartimage.can_be_filtered: - return run_image_filters(data) + return run_image_filters(data, info) return True def _coverart_downloaded(self, coverartimage, data, http, error): @@ -139,7 +135,7 @@ class CoverArt: try: info = imageinfo.identify(data) if self._should_save_image(coverartimage, data, info): - self._set_metadata(coverartimage, data) + self._set_metadata(coverartimage, data, info) except (CoverArtImageIOError, imageinfo.IdentificationError): # It doesn't make sense to store/download more images if we can't # save them in the temporary folder, abort. diff --git a/picard/coverart/processing/__init__.py b/picard/coverart/processing/__init__.py index 5085c7684..85f15f451 100644 --- a/picard/coverart/processing/__init__.py +++ b/picard/coverart/processing/__init__.py @@ -39,9 +39,9 @@ from picard.extension_points.cover_art_processors import ( from picard.util.imageinfo import IdentificationError -def run_image_filters(data): +def run_image_filters(data, info): for f in ext_point_cover_art_filters: - if not f(data): + if not f(data, info): return False return True @@ -53,13 +53,13 @@ def run_image_metadata_filters(metadata): return True -def run_image_processors(data, coverartimage): +def run_image_processors(coverartimage, data, info): config = get_config() tags_data = data file_data = data try: start_time = time.time() - image = ProcessingImage(data) + image = ProcessingImage(data, info) both_queue, tags_queue, file_queue = get_cover_art_processors() for processor in both_queue: processor.run(image, ProcessingTarget.BOTH) diff --git a/picard/coverart/processing/filters.py b/picard/coverart/processing/filters.py index 8961c126a..f6df3c056 100644 --- a/picard/coverart/processing/filters.py +++ b/picard/coverart/processing/filters.py @@ -18,8 +18,6 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from PyQt6.QtGui import QImage - from picard import log from picard.config import get_config from picard.extension_points.cover_art_filters import ( @@ -47,9 +45,8 @@ def _check_threshold_size(width, height): return True -def size_filter(data): - image = QImage.fromData(data) - return _check_threshold_size(image.width(), image.height()) +def size_filter(data, info): + return _check_threshold_size(info.width, info.height) def size_metadata_filter(metadata): diff --git a/test/test_coverart_processing.py b/test/test_coverart_processing.py index 0efd50fd1..7dac01bad 100644 --- a/test/test_coverart_processing.py +++ b/test/test_coverart_processing.py @@ -50,7 +50,12 @@ def create_fake_image(width, height, image_format): image = QImage(width, height, QImage.Format.Format_ARGB32) image.save(buffer, image_format) buffer.close() - return buffer.data() + data = buffer.data() + try: + info = imageinfo.identify(data) + except imageinfo.IdentificationError: + info = None + return data, info class ImageFiltersTest(PicardTestCase): @@ -64,12 +69,12 @@ class ImageFiltersTest(PicardTestCase): self.set_config_values(settings) def test_filter_by_size(self): - image1 = create_fake_image(400, 600, 'png') - image2 = create_fake_image(500, 500, 'jpeg') - image3 = create_fake_image(600, 600, 'bmp') - self.assertFalse(size_filter(image1)) - self.assertTrue(size_filter(image2)) - self.assertTrue(size_filter(image3)) + image1, info1 = create_fake_image(400, 600, 'png') + image2, info2 = create_fake_image(500, 500, 'jpeg') + image3, info3 = create_fake_image(600, 600, 'tiff') + self.assertFalse(size_filter(image1, info1)) + self.assertTrue(size_filter(image2, info2)) + self.assertTrue(size_filter(image3, info3)) def test_filter_by_size_metadata(self): image_metadata1 = {'width': 400, 'height': 600} @@ -105,8 +110,8 @@ class ImageProcessorsTest(PicardTestCase): def _check_image_processors(self, size, expected_tags_size, expected_file_size=None): coverartimage = CoverArtImage() - image = create_fake_image(size[0], size[1], 'jpg') - run_image_processors(image, coverartimage) + image, info = create_fake_image(size[0], size[1], 'jpg') + run_image_processors(coverartimage, image, info) tags_size = (coverartimage.width, coverartimage.height) if config.setting['save_images_to_tags']: self.assertEqual(tags_size, expected_tags_size) @@ -154,7 +159,7 @@ class ImageProcessorsTest(PicardTestCase): self.set_config_values(self.settings) def _check_resize_image(self, size, expected_size): - image = ProcessingImage(create_fake_image(size[0], size[1], 'jpg')) + image = ProcessingImage(*create_fake_image(size[0], size[1], 'jpg')) processor = ResizeImage() processor.run(image, ProcessingTarget.TAGS) new_size = (image.get_qimage().width(), image.get_qimage().height()) @@ -237,7 +242,7 @@ class ImageProcessorsTest(PicardTestCase): self.set_config_values(self.settings) def _check_convert_image(self, format, expected_format): - image = ProcessingImage(create_fake_image(100, 100, format)) + image = ProcessingImage(*create_fake_image(100, 100, format)) processor = ConvertImage() processor.run(image, ProcessingTarget.TAGS) new_image = image.get_result() @@ -255,7 +260,7 @@ class ImageProcessorsTest(PicardTestCase): self.set_config_values(self.settings) def test_identification_error(self): - image = create_fake_image(0, 0, 'jpg') + image, info = create_fake_image(0, 0, 'jpg') coverartimage = CoverArtImage() with self.assertRaises(CoverArtProcessingError): - run_image_processors(image, coverartimage) + run_image_processors(coverartimage, image, info)