Merge remote branch 'remotes/jwandborg/feature_400-resize_images_to_fit_page'

Conflicts:
	mediagoblin/db/migrations.py
	mediagoblin/db/models.py
	mediagoblin/process_media/__init__.py
	mediagoblin/templates/mediagoblin/user_pages/media.html
	mediagoblin/util.py
This commit is contained in:
Christopher Allan Webber 2011-07-16 16:28:12 -05:00
commit 5f72a4c331
4 changed files with 46 additions and 20 deletions

View File

@ -21,7 +21,11 @@ from mongokit import Document
from mediagoblin import util
from mediagoblin.auth import lib as auth_lib
from mediagoblin import mg_globals
from mediagoblin.db import migrations
from mediagoblin.db.util import ASCENDING, DESCENDING, ObjectId
from mediagoblin.util import Pagination
from mediagoblin.util import DISPLAY_IMAGE_FETCHING_ORDER
###################
# Custom validators
@ -108,6 +112,24 @@ class MediaEntry(Document):
return self.db.MediaComment.find({
'media_entry': self['_id']}).sort('created', DESCENDING)
def get_display_media(self, media_map, fetch_order=DISPLAY_IMAGE_FETCHING_ORDER):
"""
Find the best media for display.
Args:
- media_map: a dict like
{u'image_size': [u'dir1', u'dir2', u'image.jpg']}
- fetch_order: the order we should try fetching images in
Returns:
(media_size, media_path)
"""
media_sizes = media_map.keys()
for media_size in DISPLAY_IMAGE_FETCHING_ORDER:
if media_size in media_sizes:
return media_map[media_size]
def main_mediafile(self):
pass

View File

@ -57,36 +57,43 @@ def process_media_initial(media_id):
thumb.save(thumb_file, "JPEG", quality=90)
"""
Create medium file, used in `media.html`
If the size of the original file exceeds the specified size of a `medium`
file, a `medium.jpg` files is created and later associated with the media
entry.
"""
medium = Image.open(queued_filename)
medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS)
medium_processed = False
if medium.mode != "RGB":
medium = medium.convert("RGB")
if medium.size[0] > MEDIUM_SIZE[0] or medium.size[1] > MEDIUM_SIZE[1]:
medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS)
medium_filepath = create_pub_filepath(entry, 'medium.jpg')
if medium.mode != "RGB":
medium = medium.convert("RGB")
medium_file = mgg.public_store.get_file(medium_filepath, 'w')
with medium_file:
medium.save(medium_file, "JPEG", quality=90)
medium_filepath = create_pub_filepath(entry, 'medium.jpg')
medium_file = mgg.public_store.get_file(medium_filepath, 'w')
with medium_file:
medium.save(medium_file, "JPEG", quality=90)
medium_processed = True
# we have to re-read because unlike PIL, not everything reads
# things in string representation :)
queued_file = file(queued_filename, 'rb')
with queued_file:
main_filepath = create_pub_filepath(entry, queued_filepath[-1])
original_filepath = create_pub_filepath(entry, queued_filepath[-1])
with mgg.public_store.get_file(main_filepath, 'wb') as main_file:
main_file.write(queued_file.read())
with mgg.public_store.get_file(original_filepath, 'wb') as original_file:
original_file.write(queued_file.read())
mgg.queue_store.delete_file(queued_filepath)
entry['queued_media_file'] = []
media_files_dict = entry.setdefault('media_files', {})
media_files_dict['thumb'] = thumb_filepath
media_files_dict['main'] = main_filepath
media_files_dict['medium'] = medium_filepath
media_files_dict['original'] = original_filepath
if medium_processed:
media_files_dict['medium'] = medium_filepath
entry['state'] = u'processed'
entry.save()

View File

@ -23,13 +23,8 @@
{% block mediagoblin_content %}
{% if media %}
<div class="grid_11 alpha">
{% if media.media_files.medium %}
<img src="{{ request.app.public_store.file_url(
media.media_files.medium) }}" />
{% else %}
<img src="{{ request.app.public_store.file_url(
media.media_files.main) }}" />
{% endif %}
<img class="media_image" src="{{ request.app.public_store.file_url(
media.get_display_media(media.media_files)) }}" />
<h2>
{{media.title}}

View File

@ -39,6 +39,8 @@ from mediagoblin.db.util import ObjectId
from itertools import izip, count
DISPLAY_IMAGE_FETCHING_ORDER = [u'medium', u'original', u'thumb']
TESTS_ENABLED = False
def _activate_testing():
"""