summarylogtreecommitdiffstats
path: root/audiotag-thumbnailer
blob: 6d2958630e96419aae9c7a3e470e2cc22b0ce1ad (plain)
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)