1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#!/usr/bin/python2
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# Version 2, December 2004
#
# Copyright (C) 2011 solsTiCe d'Hiver <solstice.dhiver@gmail.com>
# Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
#
# Everyone is permitted to copy and distribute verbatim or modified
# copies of this license document, and changing it is allowed as long
# as the name is changed.
#
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.
import os
import sys
from PIL import Image
from StringIO import StringIO
import urllib
import base64
DEFAULT_SIZE = 192
def get_img_ogg(filename, size=(DEFAULT_SIZE, DEFAULT_SIZE)):
from mutagen.oggvorbis import OggVorbis
ov = OggVorbis(filename)
pic = base64.b64decode(ov['coverart'][0])
#mimetype = ov['coverartmime']
img = Image.open(StringIO(pic))
img = img.resize(size, Image.ANTIALIAS)
return img
def get_img_mp3(filename, size=(DEFAULT_SIZE, DEFAULT_SIZE)):
from mutagen.mp3 import MP3
mp3 = MP3(filename)
if mp3.has_key('APIC'):
apic = mp3.get('APIC')
else:
keys = mp3.keys()
found = False
for k in keys:
if k.startswith('APIC:'):
mykey = k
found = True
break
if found:
apic = mp3.get(mykey)
else:
sys.exit(1)
mimetype = apic.mime
img = Image.open(StringIO(apic.data))
img = img.resize(size, Image.ANTIALIAS)
return img
IMG_EXTRACTOR_FUNC = {'.mp3':get_img_mp3, '.ogg':get_img_ogg}
def get_img(filename, size=(DEFAULT_SIZE, DEFAULT_SIZE)):
path, ext = os.path.splitext(filename)
return IMG_EXTRACTOR_FUNC[ext.lower()](filename, size)
if __name__ == '__main__':
# If we have 2 args
if len(sys.argv) == 3:
INPUT_FILE = urllib.url2pathname(sys.argv[1]).replace('file://', '')
OUTPUT_FILE = urllib.url2pathname(sys.argv[2]).replace('file://', '')
get_img(INPUT_FILE).save(OUTPUT_FILE, 'png')
else:
# usage
sys.exit(1)
|