diff --git a/beets/mediafile.py b/beets/mediafile.py index b25184727..7cf4ef6e3 100644 --- a/beets/mediafile.py +++ b/beets/mediafile.py @@ -254,7 +254,19 @@ def _image_mime_type(data): """Return the MIME type of the image data (a bytestring). """ kind = imghdr.what(None, h=data) - return 'image/{0}'.format(kind) + if kind in ['gif', 'jpeg', 'png', 'tiff', 'bmp']: + return 'image/{0}'.format(kind) + elif kind == 'pgm': + return 'image/x-portable-graymap' + elif kind == 'pbm': + return 'image/x-portable-bitmap' + elif kind == 'ppm': + return 'image/x-portable-pixmap' + elif kind == 'xbm': + return 'image/x-xbitmap' + else: + return 'image/x-{0}'.format(kind) + # StorageStyle classes describe strategies for accessing values in # Mutagen file objects. diff --git a/test/test_mediafile.py b/test/test_mediafile.py index c8e878086..e1a926530 100644 --- a/test/test_mediafile.py +++ b/test/test_mediafile.py @@ -186,6 +186,24 @@ class ExtendedImageStructureTestMixin(ImageStructureTestMixin): self.assertEqual(image.desc, desc) self.assertEqual(image.type, type) + def test_add_tiff_image(self): + mediafile = self._mediafile_fixture('image') + self.assertEqual(len(mediafile.images), 2) + + image = Image(data=self.tiff_data, desc='the composer', + type=Image.TYPES.composer) + mediafile.images += [image] + mediafile.save() + + mediafile = MediaFile(mediafile.path) + self.assertEqual(len(mediafile.images), 3) + + # WMA does not preserve the order, so we have to work around this + image = filter(lambda i: i.mime_type == 'image/tiff', + mediafile.images)[0] + self.assertExtendedImageAttributes(image, + desc='the composer', type=Image.TYPES.composer) + # TODO include this in ReadWriteTestBase if implemented class LazySaveTestMixin(object):