speed up by not calling exiftools always, images now always have figcaptions, catch errors properly

This commit is contained in:
rra 2019-09-04 16:13:29 +02:00
parent dbe0e59b90
commit b613eef36c
2 changed files with 30 additions and 38 deletions

View File

@ -7,27 +7,18 @@ import magic
from PIL import Image
from distribusi.page_template import html_footer, html_head
CODE_TYPES = ['x-c', 'html']
FILE_TYPES = {
'image': '<figure><img class="image" src="{}">{}</figure>',
'pdf': (
'<object data="{}" class="pdf" type="application/pdf">'
'<embed src="{}" type="application/pdf" /></object>'
),
'text': '<a href="{}" class="text">{}</a>',
'video': ('<video class="video" controls>' '<source src="{}"></source></video>'),
'audio': ('<audio controls class="audio">' '<source src="{}"></source></audio>'),
}
from distribusi.mappings import CODE_TYPES, FILE_TYPES
MIME_TYPE = magic.Magic(mime=True)
def caption(image):
try:
process = subprocess.Popen(['exiftool', '-Comment', image], stdout=subprocess.PIPE)
out, err = process.communicate()
except Exception as e:
print(e)
print('Do you have exiftool installed?')
try:
caption = out.decode("utf-8").split(": ", 1)[1]
except:
@ -36,6 +27,7 @@ def caption(image):
def thumbnail(image, name, args):
try:
size = (450, 450)
im = Image.open(image)
im.thumbnail(size)
@ -43,14 +35,17 @@ def thumbnail(image, name, args):
im.save(output, format='JPEG')
im_data = output.getvalue()
data_url = base64.b64encode(im_data).decode()
if args.captions:
cap = caption(image)
if cap and args.captions:
cap = "<figcaption>{}</figcaption>".format(cap)
else:
cap = ''
cap = name
return (
"<figure><a href='{}'><img class='thumbnail' src='data:image/jpg;base64,{}'></a>{}</figure>"
"<figure><a href='{}'><img class='thumbnail' src='data:image/jpg;base64,{}'></a><figcaption>{}</figcaption></figure>"
).format(name, data_url, cap)
except Exception as e:
print(e)
return "<figure><a href='{}'><img class='thumbnail' src='{}'></a><figcaption>{}</figcaption></figure>".format(name, name,name)
def div(args, mime, tag, *values):
@ -60,7 +55,7 @@ def div(args, mime, tag, *values):
else:
filename = ''
if 'image' in mime:
html = '<div id="{}">{}' + filename + '</div>'
html = '<div id="{}">{}</div>'
elif 'pdf' in mime:
html = '<div id="{}">{}' + filename + '</div>'
else:
@ -103,11 +98,10 @@ def distribusify(args, directory): # noqa
if mime == 'image' and args.thumbnail:
a = thumbnail(full_path, name, args)
else:
if args.captions:
cap = caption(full_path)
if cap and args.captions:
cap = "<figcaption>{}</figcaption>".format(cap)
else:
cap = ''
cap = name
a = FILE_TYPES[mime].format(full_path, cap)
if format in FILE_TYPES:

View File

@ -1,8 +1,6 @@
from setuptools import find_packages, setup
dependencies = [
# pinned because https://github.com/python-pillow/Pillow/issues/2609
'pillow==4.1',
'python-magic==0.4.15',
]