diff --git a/beets/util/artresizer.py b/beets/util/artresizer.py index 566087568..d7fa115e9 100644 --- a/beets/util/artresizer.py +++ b/beets/util/artresizer.py @@ -194,6 +194,22 @@ class IMBackend(LocalBackend): log.warning('Could not understand IM output: {0!r}', out) return None + def deinterlace(self, path_in, path_out=None): + path_out = path_out or temp_file_for(path_in) + + cmd = self.convert_cmd + [ + syspath(path_in, prefix=False), + '-interlace', 'none', + syspath(path_out, prefix=False), + ] + + try: + util.command_output(cmd) + return path_out + except subprocess.CalledProcessError: + # FIXME: add a warning + return path_in + class PILBackend(LocalBackend): NAME="PIL" @@ -282,39 +298,16 @@ class PILBackend(LocalBackend): displayable_path(path_in), exc) return None + def deinterlace(self, path_in, path_out=None): + path_out = path_out or temp_file_for(path_in) + from PIL import Image -def pil_deinterlace(backend, path_in, path_out=None): - path_out = path_out or temp_file_for(path_in) - from PIL import Image - - try: - im = Image.open(syspath(path_in)) - im.save(py3_path(path_out), progressive=False) - return path_out - except IOError: - return path_in - - -def im_deinterlace(backend, path_in, path_out=None): - path_out = path_out or temp_file_for(path_in) - - cmd = backend.convert_cmd + [ - syspath(path_in, prefix=False), - '-interlace', 'none', - syspath(path_out, prefix=False), - ] - - try: - util.command_output(cmd) - return path_out - except subprocess.CalledProcessError: - return path_in - - -DEINTERLACE_FUNCS = { - PIL: pil_deinterlace, - IMAGEMAGICK: im_deinterlace, -} + try: + im = Image.open(syspath(path_in)) + im.save(py3_path(path_out), progressive=False) + return path_out + except IOError: + return path_in def im_get_format(backend, filepath): @@ -512,8 +505,7 @@ class ArtResizer(metaclass=Shareable): Only available locally. """ if self.local: - func = DEINTERLACE_FUNCS[self.local_method.ID] - return func(self.local_method, path_in, path_out) + return self.local_method.deinterlace(path_in, path_out) else: # FIXME: Should probably issue a warning? return path_in diff --git a/test/test_art_resize.py b/test/test_art_resize.py index 80604ba76..57a7121f7 100644 --- a/test/test_art_resize.py +++ b/test/test_art_resize.py @@ -24,8 +24,6 @@ from beets.util import command_output, syspath from beets.util.artresizer import ( IMBackend, PILBackend, - pil_deinterlace, - im_deinterlace, ) @@ -120,10 +118,10 @@ class ArtResizerFileSizeTest(_common.TestCase, TestHelper): def test_pil_file_deinterlace(self): """Test PIL deinterlace function. - Check if pil_deinterlace function returns images + Check if the `PILBackend.deinterlace()` function returns images that are non-progressive """ - path = pil_deinterlace(PILBackend(), self.IMG_225x225) + path = PILBackend().deinterlace(self.IMG_225x225) from PIL import Image with Image.open(path) as img: self.assertFalse('progression' in img.info) @@ -132,11 +130,11 @@ class ArtResizerFileSizeTest(_common.TestCase, TestHelper): def test_im_file_deinterlace(self): """Test ImageMagick deinterlace function. - Check if im_deinterlace function returns images + Check if the `IMBackend.deinterlace()` function returns images that are non-progressive. """ im = IMBackend() - path = im_deinterlace(im, self.IMG_225x225) + path = im.deinterlace(self.IMG_225x225) cmd = im.identify_cmd + [ '-format', '%[interlace]', syspath(path, prefix=False), ]