Skip to content

Commit

Permalink
Merge pull request mozilla#658 from cvan/themes-icon
Browse files Browse the repository at this point in the history
generate theme thumbnails (bug 846088)
  • Loading branch information
cvan committed Mar 11, 2013
2 parents 1d05882 + 362c569 commit 0e58be3
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 23 deletions.
7 changes: 4 additions & 3 deletions apps/addons/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -533,7 +533,7 @@ def clean_tags(self):
return clean_tags(self.request, self.cleaned_data['tags'])

def save(self, commit=False):
from addons.tasks import (create_persona_preview_image,
from addons.tasks import (create_persona_preview_images,
save_persona_image)
data = self.cleaned_data
# TODO: Ask for slug.
Expand All @@ -556,8 +556,9 @@ def save(self, commit=False):
full_dst=os.path.join(dst_root, 'header.png'))
save_persona_image.delay(src=footer,
full_dst=os.path.join(dst_root, 'footer.png'))
create_persona_preview_image.delay(src=header,
full_dst=os.path.join(dst_root, 'preview.png'),
create_persona_preview_images.delay(src=header,
full_dst=[os.path.join(dst_root, 'preview.png'),
os.path.join(dst_root, 'icon.png')],
set_modified_on=[addon])
except IOError:
addon.delete()
Expand Down
37 changes: 27 additions & 10 deletions apps/addons/tasks.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import os
import logging

from django.conf import settings
Expand All @@ -10,8 +9,8 @@

import amo
from amo.decorators import set_modified_on, write
from amo.utils import (attach_trans_dict, cache_ns_key, sorted_groupby,
ImageCheck)
from amo.utils import (attach_trans_dict, cache_ns_key, resize_image,
sorted_groupby, ImageCheck)
from lib.es.hold import add
from lib.es.utils import index_objects
from market.models import AddonPremium
Expand Down Expand Up @@ -181,19 +180,37 @@ def delete_persona_image(dst, **kw):

@task
@set_modified_on
def create_persona_preview_image(src, full_dst, **kw):
"""Creates a 680x100 thumbnail used for the Persona preview."""
log.info('[1@None] Resizing persona image: %s' % full_dst)
def create_persona_preview_images(src, full_dst, **kw):
"""
Creates a 680x100 thumbnail used for the Persona preview and
a 32x32 thumbnail used for search suggestions/detail pages.
"""
log.info('[1@None] Resizing persona images: %s' % full_dst)
preview, full = amo.PERSONA_IMAGE_SIZES['header']
new_w, new_h = preview
preview_w, preview_h = preview
orig_w, orig_h = full
with storage.open(src) as fp:
i = Image.open(fp)
i_orig = i = Image.open(fp)

# Crop image from the right.
i = i.crop((orig_w - (new_w * 2), 0, orig_w, orig_h))
i = i.crop((orig_w - (preview_w * 2), 0, orig_w, orig_h))

# Resize preview.
i = i.resize(preview, Image.ANTIALIAS)
i.load()
with storage.open(full_dst, 'wb') as fp:
with storage.open(full_dst[0], 'wb') as fp:
i.save(fp, 'png')

_, icon_size = amo.PERSONA_IMAGE_SIZES['icon']
icon_w, icon_h = icon_size

# Resize icon.
i = i_orig
i.load()
i = i.crop((orig_w - (preview_h * 2), 0, orig_w, orig_h))
i = i.resize(icon_size, Image.ANTIALIAS)
i.load()
with storage.open(full_dst[1], 'wb') as fp:
i.save(fp, 'png')
return True

Expand Down
3 changes: 1 addition & 2 deletions apps/amo/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -479,8 +479,7 @@ def patched_load(self):
Image.Image.load = patched_load


def resize_image(src, dst, size=None, remove_src=True,
locally=False):
def resize_image(src, dst, size=None, remove_src=True, locally=False):
"""Resizes and image from src, to dst. Returns width and height.
When locally is True, src and dst are assumed to reside
Expand Down
1 change: 1 addition & 0 deletions apps/constants/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,7 @@
PERSONA_IMAGE_SIZES = {
'header': [(680, 100), (3000, 200)],
'footer': [None, (3000, 100)],
'icon': [None, (32, 32)],
}

# Accepted image MIME-types
Expand Down
1 change: 0 additions & 1 deletion apps/users/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from django.core.files.storage import default_storage as storage

import commonware.log
import elasticutils.contrib.django as elasticutils
from celeryutils import task
from lib.es.utils import index_objects

Expand Down
4 changes: 0 additions & 4 deletions apps/zadmin/tests/test_tasks.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
# -*- coding: utf-8 -*-
from cStringIO import StringIO
import json

from django.conf import settings

import mock
Expand All @@ -10,7 +7,6 @@
import amo
import amo.tests
from addons.models import Addon
from amo.urlresolvers import reverse
from files.utils import make_xpi
from zadmin import tasks

Expand Down
6 changes: 3 additions & 3 deletions mkt/themes/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def clean_name(self):
return clean_name(self.cleaned_data['name'])

def save(self, commit=False):
from addons.tasks import (create_persona_preview_image,
from addons.tasks import (create_persona_preview_images,
save_persona_image)
data = self.cleaned_data
addon = Addon.objects.create(id=None, name=data['name'],
Expand All @@ -83,8 +83,8 @@ def save(self, commit=False):
full_dst=os.path.join(dst_root, 'header.png'))
save_persona_image.delay(src=footer,
full_dst=os.path.join(dst_root, 'footer.png'))
create_persona_preview_image.delay(src=header,
full_dst=os.path.join(dst_root, 'preview.png'),
create_persona_preview_images.delay(src=header,
full_dst=[os.path.join(dst_root, 'preview.png')],
set_modified_on=[addon])
except IOError:
addon.delete()
Expand Down

0 comments on commit 0e58be3

Please sign in to comment.