aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoar Wandborg <git@wandborg.com>2011-07-03 05:46:00 +0200
committerJoar Wandborg <git@wandborg.com>2011-07-03 05:46:00 +0200
commit2c9e635ae2ecbef0649df78636503be357f16a7f (patch)
treeb3f3c80c29c434c89b0d43f02e708a3610d7e5c7
parent93214d8e0287150aef3f4370237303bc73ec448c (diff)
downloadmediagoblin-2c9e635ae2ecbef0649df78636503be357f16a7f.tar.lz
mediagoblin-2c9e635ae2ecbef0649df78636503be357f16a7f.tar.xz
mediagoblin-2c9e635ae2ecbef0649df78636503be357f16a7f.zip
Feature #400 - Resize images to fit on page - Additions
* `migrations.py` * Removed empty line * Added empty line * `models.py` * Added `MediaEntry.get_display_media()` helper function * `process_media.__init__.py` * Updated `process_media_initial()` * Renamed `main` => `original`. * Added condition to `medium`, it's only created if the original dimensions exceed the MEDIUM_SIZE dimensions. * `media.html` * The image tag is now populated by `MediaEntry.get_display_media()` * `util.py` * Added `DISPLAY_IMAGE_FETCHING_ORDER`, used by `MediaEntry.get_display_media()`
-rw-r--r--mediagoblin/db/migrations.py2
-rw-r--r--mediagoblin/db/models.py19
-rw-r--r--mediagoblin/process_media/__init__.py33
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/media.html9
-rw-r--r--mediagoblin/util.py2
5 files changed, 44 insertions, 21 deletions
diff --git a/mediagoblin/db/migrations.py b/mediagoblin/db/migrations.py
index 712f8ab4..b888ad3e 100644
--- a/mediagoblin/db/migrations.py
+++ b/mediagoblin/db/migrations.py
@@ -49,7 +49,7 @@ class MediaEntryMigration(DocumentMigration):
'$set': {
'description_html': cleaned_markdown_conversion(
doc['description'])}}
-
+
class UserMigration(DocumentMigration):
def allmigration01_add_bio_and_url_profile(self):
"""
diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py
index bf825a23..3190d8fa 100644
--- a/mediagoblin/db/models.py
+++ b/mediagoblin/db/models.py
@@ -24,6 +24,7 @@ from mediagoblin import mg_globals
from mediagoblin.db import migrations
from mediagoblin.db.util import DESCENDING, ObjectId
from mediagoblin.util import Pagination
+from mediagoblin.util import DISPLAY_IMAGE_FETCHING_ORDER
###################
# Custom validators
@@ -109,6 +110,24 @@ class MediaEntry(Document):
migration_handler = migrations.MediaEntryMigration
+ 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()
+ print media_sizes
+ for media_size in DISPLAY_IMAGE_FETCHING_ORDER:
+ if media_size in media_sizes:
+ return media_map[media_size]
+
def main_mediafile(self):
pass
diff --git a/mediagoblin/process_media/__init__.py b/mediagoblin/process_media/__init__.py
index 0d1abcb3..9e0ceff7 100644
--- a/mediagoblin/process_media/__init__.py
+++ b/mediagoblin/process_media/__init__.py
@@ -57,36 +57,43 @@ def process_media_initial(media_id):
thumb.save(thumb_file, "JPEG")
"""
- 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")
+ 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")
+ 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()
diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html
index e16f1e00..56d79662 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/media.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/media.html
@@ -26,13 +26,8 @@
<h1>
{{media.title}}
</h1>
- {% if media.media_files.medium %}
- <img class="media_image" src="{{ request.app.public_store.file_url(
- media.media_files.medium) }}" />
- {% else %}
- <img class="media_image" 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)) }}" />
<p>
Uploaded on
{{ "%4d-%02d-%02d"|format(media.created.year,
diff --git a/mediagoblin/util.py b/mediagoblin/util.py
index a20e87c4..a5425663 100644
--- a/mediagoblin/util.py
+++ b/mediagoblin/util.py
@@ -35,6 +35,8 @@ from mediagoblin import mg_globals
from mediagoblin import messages
from mediagoblin.db.util import ObjectId
+DISPLAY_IMAGE_FETCHING_ORDER = [u'medium', u'original', u'thumb']
+
TESTS_ENABLED = False
def _activate_testing():
"""