python-efl/examples/ethumb/ethumb.py

125 lines
3.1 KiB
Python
Executable File

#!/usr/bin/env python
# encoding: utf-8
import os
import sys
import time
import logging
from efl import ecore
from efl import ethumb
script_path = os.path.dirname(os.path.abspath(__file__))
TESTS = [
("1. Generating a standard FDO thumbnail (default)...", {}),
("2. Generating a large FDO thumbnail...", {
'thumb_fdo': ethumb.ETHUMB_THUMB_LARGE,
}),
("3. Generating a very large JPG thumbnail...", {
'thumb_format': ethumb.ETHUMB_THUMB_JPEG,
'thumb_size': (512, 512),
}),
("4. Generating a cropped thumbnail...", {
'thumb_aspect': ethumb.ETHUMB_THUMB_CROP,
}),
("5. Generating a rotated thumbnail...", {
'thumb_orientation': ethumb.ETHUMB_THUMB_ROTATE_180,
'thumb_size': (256, 256),
'thumb_aspect': ethumb.ETHUMB_THUMB_KEEP_ASPECT,
}),
("6. Generating a poor quality thumbnail in this folder...", {
'thumb_orientation': ethumb.ETHUMB_THUMB_ORIENT_NONE,
'thumb_path': os.path.join(script_path, 'big_poor.jpg'),
'thumb_format': ethumb.ETHUMB_THUMB_JPEG,
'thumb_size': (512, 512),
'thumb_quality': 10,
}),
]
# parse command line arguments
if len(sys.argv) != 2:
print("Python Ethumb test application.\n\n" \
"usage: ethumb.py filename\n")
exit(1)
filename = sys.argv[1]
print("Original file: %s\n" % filename)
# setup efl logging (you also need to set EINA_LOG_LEVEL=X)
l = logging.getLogger("efl")
h = logging.StreamHandler()
h.setFormatter(logging.Formatter("EFL %(levelname)s %(message)s"))
l.addHandler(h)
l.setLevel(logging.DEBUG)
# create a single Ethumb instance
et = ethumb.Ethumb()
in_progress = False
start_time = 0.0
def generate_cb(et, success):
global in_progress
# thumbnail completed
if success is True:
# print out the result
print(" Completed in %.3f seconds." % (time.time() - start_time))
print(" Thumb: '%s'\n" % et.thumb_path[0])
else:
print(" ERROR! aborting.")
ecore.main_loop_quit()
in_progress = False
def start_thumb(label, params):
global in_progress
global start_time
# setup ethumb params
et.file = filename
for name, val in params.items():
setattr(et, name, val)
# print test name and keep track of start time
print(label)
start_time = time.time()
# start the thumbnailing process
ret = et.generate(generate_cb) # TODO test args and kargs
if ret is False:
print("Error starting the thumbnailer!")
ecore.main_loop_quit()
else:
in_progress = True
def idler_cb():
# Ethumb cannot generate more than one thumb at the same time
if in_progress:
return ecore.ECORE_CALLBACK_RENEW
try:
# advance to the next test
label, params = TESTS.pop(0)
start_thumb(label, params)
except IndexError:
# all done, quit.
print("Test Completed!")
ecore.main_loop_quit()
return ecore.ECORE_CALLBACK_RENEW
# start the idler and the main loop
idler = ecore.Idler(idler_cb)
ecore.main_loop_begin()
# free used resource
et.delete()