-
-
Save roderickm/b7bd00587ef130c1bd60 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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