47 lines
1.3 KiB
Python
Executable File
47 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import pickle
|
|
import sys
|
|
import os
|
|
import imghdr
|
|
import base64
|
|
|
|
if __name__ == '__main__':
|
|
if len(sys.argv) != 3:
|
|
print("""\
|
|
Usage:
|
|
{} unpack output-dir
|
|
{} pack input-dir
|
|
""".format(sys.argv[0], sys.argv[0]))
|
|
sys.exit(1)
|
|
|
|
if sys.argv[1] == 'unpack':
|
|
with open('emoji.cache', 'rb') as f:
|
|
dic = pickle.load(f)
|
|
outdir = sys.argv[2]
|
|
assert os.path.isdir(outdir)
|
|
for md5, img in dic.items():
|
|
data = img[0]
|
|
if not isinstance(data, bytes):
|
|
data = data.encode('ascii')
|
|
name = os.path.join(outdir, md5 + '.' + img[1].lower())
|
|
print(name)
|
|
with open(name, 'wb') as f:
|
|
f.write(base64.decodebytes(data))
|
|
elif sys.argv[1] == 'pack':
|
|
ret = {}
|
|
indir = sys.argv[2]
|
|
files = os.listdir(indir)
|
|
for fname in files:
|
|
try:
|
|
md5, format = fname.split('.')
|
|
except:
|
|
print("Unable to parse", fname)
|
|
continue
|
|
with open(os.path.join(indir, fname), 'rb') as f:
|
|
b64 = base64.encodebytes(f.read()).decode('ascii')
|
|
ret[md5] = (b64, format)
|
|
with open('emoji.cache', 'wb') as f:
|
|
pickle.dump(ret, f)
|