Skip to content

Instantly share code, notes, and snippets.

@roderickm
Forked from vkolev/imageworker.py
Created May 25, 2014 03:48
Show Gist options
  • Save roderickm/b7bd00587ef130c1bd60 to your computer and use it in GitHub Desktop.
Save roderickm/b7bd00587ef130c1bd60 to your computer and use it in GitHub Desktop.
import os
import gearman
from PIL import Image
MINI_SIZE = (50, 50)
THUMB_SIZE = (150, 150)
MOBILE_SIZE = (600, 600)
FULL_SIZE = (1024, 1024)
class ImageThumbnailWorker(gearman.GearmanWorker):
def on_job_execute(self, current_job):
full_path = current_job.data
base_path, file_name = os.path.split(full_path)
self._mkthumb(base_path, file_name)
self._mkmini(base_path, file_name)
self._mkmobile(base_path, file_name)
self._mkfull(base_path, file_name)
return None
def _mkthumb(self, basepath, filename):
thumbfolder = os.path.join(basepath, 'thumbs')
im = Image.open(os.path.join(basepath, filename))
im.thumbnail(THUMB_SIZE, Image.ANTIALIAS)
if not os.path.isdir(thumbfolder):
os.mkdir(thumbfolder)
im.save(os.path.join(thumbfolder, filename))
def _mkmini(self, basepath, filename):
thumbfolder = os.path.join(basepath, 'mini')
im = Image.open(os.path.join(basepath, filename))
im.thumbnail(MINI_SIZE, Image.ANTIALIAS)
if not os.path.isdir(thumbfolder):
os.mkdir(thumbfolder)
im.save(os.path.join(thumbfolder, filename))
def _mkmobile(self, basepath, filename):
thumbfolder = os.path.join(basepath, 'mobile')
im = Image.open(os.path.join(basepath, filename))
im.thumbnail(MOBILE_SIZE, Image.ANTIALIAS)
if not os.path.isdir(thumbfolder):
os.mkdir(thumbfolder)
im.save(os.path.join(thumbfolder, filename))
def _mkfull(self, basepath, filename):
thefile = os.path.join(basepath, filename)
im = Image.open(thefile)
im.thumbnail(FULL_SIZE, Image.ANTIALIAS)
im.save(thefile)
def on_job_exception(self, current_job, exec_info):
print "Job failed"
return super(ImageThumbnailWorker, self).on_job_exception(current_job, exec_info)
def on_job_complete(self, current_job, job_result):
print "Job completed"
return super(ImageThumbnailWorker, self).send_job_complete(current_job, job_result)
def after_poll(self, any_activity):
return True
def task_callback(gearman_worker=None, job=None):
return job.data
new_worker = ImageThumbnailWorker(['localhost:4730'])
new_worker.register_task('image_thumbnailer', task_callback)
new_worker.work()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment