mirror of
https://github.com/beetbox/beets.git
synced 2025-12-15 21:14:19 +01:00
Move away from PIL and use mimetypes instead
This commit is contained in:
parent
99ca3e96d4
commit
34a4e7be5f
1 changed files with 21 additions and 24 deletions
|
|
@ -15,7 +15,7 @@
|
|||
"""Allows beets to embed album art into file metadata."""
|
||||
|
||||
import os.path
|
||||
from io import BytesIO
|
||||
from mimetypes import guess_extension
|
||||
|
||||
import requests
|
||||
|
||||
|
|
@ -111,37 +111,34 @@ class EmbedCoverArtPlugin(BeetsPlugin):
|
|||
None, compare_threshold, ifempty,
|
||||
quality=quality)
|
||||
elif opts.url:
|
||||
from PIL import Image
|
||||
try:
|
||||
response = requests.get(opts.url, timeout=5)
|
||||
response.raise_for_status()
|
||||
except requests.exceptions.RequestException as e:
|
||||
self._log.error("Error: {}".format(e))
|
||||
return
|
||||
try:
|
||||
img = Image.open(BytesIO(response.content))
|
||||
except OSError as e:
|
||||
self._log.error("Error: {}".format(e))
|
||||
return
|
||||
if img.format:
|
||||
try:
|
||||
img.save('temp.png', format='PNG')
|
||||
except IOError as e:
|
||||
self._log.error("Cannot save image: {}".format(e))
|
||||
return
|
||||
tempimg = 'temp.png'
|
||||
items = lib.items(decargs(args))
|
||||
# Confirm with user.
|
||||
if not opts.yes and not _confirm(items, not opts.url):
|
||||
return
|
||||
for item in items:
|
||||
art.embed_item(self._log, item, tempimg, maxwidth,
|
||||
None, compare_threshold, ifempty,
|
||||
quality=quality)
|
||||
os.remove(tempimg)
|
||||
else:
|
||||
extension = guess_extension(response.headers
|
||||
['Content-Type'])
|
||||
if extension is None:
|
||||
self._log.error('Invalid image file')
|
||||
return
|
||||
tempimg = f'image{extension}'
|
||||
self._log.error(tempimg)
|
||||
try:
|
||||
with open(tempimg, 'wb') as f:
|
||||
f.write(response.content)
|
||||
except Exception as e:
|
||||
self._log.error("Unable to save image: {}".format(e))
|
||||
return
|
||||
items = lib.items(decargs(args))
|
||||
# Confirm with user.
|
||||
if not opts.yes and not _confirm(items, not opts.url):
|
||||
return
|
||||
for item in items:
|
||||
art.embed_item(self._log, item, tempimg, maxwidth,
|
||||
None, compare_threshold, ifempty,
|
||||
quality=quality)
|
||||
os.remove(tempimg)
|
||||
else:
|
||||
albums = lib.albums(decargs(args))
|
||||
# Confirm with user.
|
||||
|
|
|
|||
Loading…
Reference in a new issue