Added WWW_IMAGE_SIZE and WWW_IMAGE_THRESHOLD to library.rpy. Did not
know if I should add those variable to freevo_config.py or the
maintainer will add them.
Example usage
WWW_IMAGE_SIZE = (100, 100)
WWW_IMAGE_THRESHOLD = (800, 600)
Regards,
Chandan
On 12/30/06, Ryan Roth <[EMAIL PROTECTED]> wrote:
WWW_IMAGE_THRESHOLD
Chandan Pitta wrote:
> Can you think up of a variable name for threshold_size as well? That
> way we can decide on which images to scale.
>
> Although I like the flexibility of configuration variables, they have
> some limitations as well. For example in this case we are only
> checking if the scaled image is in cache, and if it exists we just use
> it. However if we make the image size a variable, we have to make sure
> that the cached image is the same size as set my WWW_IMAGE_SIZE. If
> not then we will have to resize the image again. This puts a little
> more load on the CPU. As it is a some of the features in webserver are
> not configurable (number of columns for items, size of image for the
> video and audio items etc.) do we want this to be a config? Moreover
> given the fact that the user will perhaps change the config only once
> in a while do we want to add the extra load of checking the size of
> cached image (by the way I do not know a grain about how CPU intensive
> it is to check image size, so please pardon my ignorance).
>
> Regards,
> Chandan
>
>
> On 12/30/06, Ryan Roth <[EMAIL PROTECTED]> wrote:
>
>> Could we make the images size a variable that could be also set from the
>> local_conf? I would personally like the image to be 100x100.
>>
>> You could use 'if hasattr(conf, 'WWW_IMAGE_SIZE'):' then fall back to
>> 200x200 if its not set
>>
>>
>> Chandan Pitta wrote:
>>
>>> Hi Duncan,
>>>
>>> I think these patches must have got lost in the noise. I sent the
>>> patches on 28, but to save you some trouble I am reattaching the files
>>> again and pasting the message for reference.
>>>
>>> Hello Duncan and Wout,
>>>
>>> I fixed the issue where you can have ITEMS which may not be a tuple
>>> (like in the case of web radio). So Duncan with the new patch you
>>> should be able to use webserver without any modifications and
>>> (hopefully) no crashes :-). Before adding child resources to twisted I
>>> check to make sure the each item is a tuple. If you think users may
>>> use lists, then we need to add that check as well. But I think we are
>>> good to go for now.
>>>
>>> As for images, I modified the code to scale images that are larger
>>> than 800x600 to 200x200 (maintaining aspect ratio of course). Does
>>> that answer your queries Wout? May be we can make the 800x600 value a
>>> config variable. Or you guys decide what would be a proper value. This
>>> change will speed up image downloads. Oh I also made sure that when
>>> you click on the links the original image files are opened.
>>>
>>> Yes I see that TV recordings work now. Excellent!
>>>
>>> Regards,
>>> Chandan
>>>
>>> Please check and merge to svn.
>>>
>>> Thanks
>>> Chandan
>>>
>>>
>>>
>>>
>>> On 12/28/06, Duncan Webb <[EMAIL PROTECTED]> wrote:
>>>
>>>> wout clymans wrote:
>>>>
>>>>> Chandan Pitta wrote:
>>>>>
>>>>>> On 12/28/06, Duncan Webb <[EMAIL PROTECTED]> wrote:
>>>>>>
>>>>>>
>>>>>>> Chandan Pitta wrote:
>>>>>>>
>>>>>> I think it is a good idea, but this has to be done only for
>>>>>> media=images. I will take a look at it.
>>>>>>
>>>>>>
>>>>> If you need any help, let me know!
>>>>> Question i already have:
>>>>> do we need to resize all images or just the images that are larger
>>>>>
>>>> than
>>>>
>>>>> 800x600 (as example) and what will be the new default size?
>>>>>
>>>> The page with lots of small images would load nice and quickly if the
>>>> images were 200x200, these should be scaled and cached.
>>>>
>>>> A full size image doesn't really need scaling but does need a max width
>>>> and max height for the browser, something in local_conf.py. Then it is
>>>> easy to keep the aspect ratio and fill either the width or height.
>>>>
>>>>
>>>>>>>
>>>>>>>> However I could not solve one problem, I am unable to click on
>>>>>>>> recorded TV programs from webpage. They are not active links. Is
>>>>>>>> anyone facing the same problem?
>>>>>>>>
>>>>>>>>
>>>>>>> These didn't work in the original patch either.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> Hmm, one more item in my TODO list then.
>>>>>>
>>>>>>
>>>>> This should be fixed in svn.
>>>>>
>>>> Works now but some of the fields in the popup window are not correct,
>>>> eg: Year and recorded time. Recorded time needs a time.localtime and a
>>>> time.strftime.
>>>>
>>>> I must say the the freevo web interface is starting to look really good
>>>> now, possibly a killer feature. Many thanks to you both for this.
>>>>
>>>> Duncan
>>>>
>>>>
>>>> -------------------------------------------------------------------------
>>>>
>>>> Take Surveys. Earn Cash. Influence the Future of IT
>>>> Join SourceForge.net's Techsay panel and you'll get the chance to
>>>> share your
>>>> opinions on IT & business topics through brief surveys - and earn cash
>>>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
>>>>
>>>> _______________________________________________
>>>> Freevo-devel mailing list
>>>> [email protected]
>>>> https://lists.sourceforge.net/lists/listinfo/freevo-devel
>>>>
>>>>
>>> ------------------------------------------------------------------------
>>>
>>> Index: src/www/htdocs/library.rpy
>>> ===================================================================
>>> --- src/www/htdocs/library.rpy (revision 8853)
>>> +++ src/www/htdocs/library.rpy (working copy)
>>> @@ -71,13 +71,27 @@
>>> return FALSE
>>>
>>> def convert_dir(self, dir_str):
>>> + '''
>>> + Converts a direct file location to a link that twisted can display.
>>> + If the file exists in one of the child resources of twisted, then
>>> + this method converts the file to a proper child resource link that
>>> + twiseted knows about.
>>> + If above case fails, the original file link will be returned.
>>> + '''
>>> print 'convert_dir(self, dir_str=%r)' % (dir_str)
>>> - for i in range(len(self.allowed_dirs)):
>>> - val = self.allowed_dirs[i][1]
>>> - if dir_str.startswith(val):
>>> - return val.replace("/", "_") + dir_str[len(val):]
>>> - return dir_str
>>> + child_res = ""
>>> + ### if the file starts with FREEVO_CACHEDIR return converted file
>>> + if dir_str.startswith(config.FREEVO_CACHEDIR):
>>> + child_res = config.FREEVO_CACHEDIR
>>> + else:
>>> + for i in range(len(self.allowed_dirs)):
>>> + val = self.allowed_dirs[i][1]
>>> + if dir_str.startswith(val):
>>> + child_res = val
>>> + break
>>>
>>> + return child_res.replace("/", "_") + dir_str[len(child_res):]
>>> +
>>> def get_suffixes (self, media):
>>> print 'get_suffixes (self, media=\"%s\")' % (media)
>>> suffixes = []
>>> @@ -452,11 +466,11 @@
>>> status = 'favorite'
>>> ### show image
>>> if action_mediatype == "images":
>>> + size = (info['width'], info['height'])
>>> + (scaled_image, new_size) =
self.get_scaled_image_and_size(filepath, size)
>>> image_link = self.convert_dir(filepath)
>>> - size = (info['width'], info['height'])
>>> - new_size = self.resize_image(image_link, size)
>>> fv.tableCell('<a
href="javascript:openfoto(\''+image_link+'\','+str(size[0])+','+str(size[1])+')">'\
>>> - +'<img src="'+image_link+'" height="'+str(new_size[1])+'px"
width="'+str(new_size[0])+'px" />'\
>>> + +'<img src="'+scaled_image+'"
height="'+str(new_size[1])+'px" width="'+str(new_size[0])+'px" />'\
>>> +'<br />'+Unicode(title)+'</a>', 'class="'+status+'"
colspan="1"')
>>> ### show movie
>>> elif action_mediatype == "movies" or action_mediatype ==
"rectv":
>>> @@ -593,8 +607,8 @@
>>> new_height = 200
>>> return [int(new_width), int(new_height + 0.5)]
>>>
>>> - def resize_image_to_square(self, image, size):
>>> - print 'resize_image_to_square(self, image=%s, size=%s)' % (image,
size)
>>> + def get_fit_to_square_size(self, size):
>>> + print 'get_fit_to_square_size(self, size=%s)' % str(size)
>>> ### if aspect ratio > 1 then scale width to 200
>>> new_size = [200, 200]
>>> try:
>>> @@ -609,6 +623,27 @@
>>> pass
>>> return new_size
>>>
>>> + def get_scaled_image_and_size(self, filepath, size):
>>> + '''
>>> + Returns the location of a scaled image and size of the scaled image
>>> + as a 2-tuple. Eg. ("/var/cache/freevo/test.jpg", [200, 150]).
>>> + The image will be scaled only if it larger than a certain prefixed
>>> + size. May be in future the prefixed image size could be a config
>>> + variable.
>>> + '''
>>> + threshold_size = [800, 600]
>>> + new_size = self.get_fit_to_square_size(size)
>>> + scaled_image_path = self.cache_dir + filepath.replace("/", "_").replace(".",
"_") + ".jpg"
>>> + if not os.path.exists(scaled_image_path):
>>> + if size[0] > threshold_size[0] or size[1] > threshold_size[1]:
>>> + image = imlib2.open(filepath)
>>> + new_image = image.scale(new_size)
>>> + new_image.save(scaled_image_path)
>>> + else:
>>> + scaled_image_path = filepath
>>> + scaled_image_path = self.convert_dir(scaled_image_path)
>>> + return (scaled_image_path, new_size)
>>> +
>>> def get_fxd_title(self, fxd_file):
>>> fxd_info = ""
>>> parser = util.fxdparser.FXD(fxd_file)
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> Index: src/helpers/webserver.py
>>> ===================================================================
>>> --- src/helpers/webserver.py (revision 8853)
>>> +++ src/helpers/webserver.py (working copy)
>>> @@ -92,14 +92,21 @@
>>>
>>> root = static.File(docRoot)
>>> root.processors = { '.rpy': script.ResourceScript, }
>>> - for (item, dir_str) in config.VIDEO_ITEMS:
>>> - root.putChild(dir_str.replace("/", "_"), static.File(dir_str))
>>> - for (item, dir_str) in config.AUDIO_ITEMS:
>>> - root.putChild(dir_str.replace("/", "_"), static.File(dir_str))
>>> - for (item, dir_str) in config.IMAGE_ITEMS:
>>> - root.putChild(dir_str.replace("/", "_"), static.File(dir_str))
>>> + for item in config.VIDEO_ITEMS:
>>> + if isinstance(item, tuple) and len(item) == 2:
>>> + dir_str = item[1]
>>> + root.putChild(dir_str.replace("/", "_"), static.File(dir_str))
>>> + for item in config.AUDIO_ITEMS:
>>> + if isinstance(item, tuple) and len(item) == 2:
>>> + dir_str = item[1]
>>> + root.putChild(dir_str.replace("/", "_"), static.File(dir_str))
>>> + for item in config.IMAGE_ITEMS:
>>> + if isinstance(item, tuple) and len(item) == 2:
>>> + dir_str = item[1]
>>> + root.putChild(dir_str.replace("/", "_"), static.File(dir_str))
>>> root.putChild(config.TV_RECORD_DIR.replace("/", "_"),
static.File(config.TV_RECORD_DIR))
>>> -
>>> + root.putChild(config.FREEVO_CACHEDIR.replace("/", "_"),
static.File(config.FREEVO_CACHEDIR))
>>> +
>>> root.putChild('vhost', vhost.VHostMonsterResource())
>>> rewriter = rewrite.RewriterResource(root, helpimagesrewrite)
>>> if (config.DEBUG == 0):
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> -------------------------------------------------------------------------
>>> Take Surveys. Earn Cash. Influence the Future of IT
>>> Join SourceForge.net's Techsay panel and you'll get the chance to share your
>>> opinions on IT & business topics through brief surveys - and earn cash
>>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> Freevo-devel mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/freevo-devel
>>>
>>>
>> -------------------------------------------------------------------------
>> Take Surveys. Earn Cash. Influence the Future of IT
>> Join SourceForge.net's Techsay panel and you'll get the chance to share your
>> opinions on IT & business topics through brief surveys - and earn cash
>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
>> _______________________________________________
>> Freevo-devel mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/freevo-devel
>>
>>
>
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys - and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> Freevo-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/freevo-devel
>
>
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Freevo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-devel
Index: src/www/htdocs/library.rpy
===================================================================
--- src/www/htdocs/library.rpy (revision 8881)
+++ src/www/htdocs/library.rpy (working copy)
@@ -607,40 +607,56 @@
new_height = 200
return [int(new_width), int(new_height + 0.5)]
- def get_fit_to_square_size(self, size):
- print 'get_fit_to_square_size(self, size=%s)' % str(size)
- ### if aspect ratio > 1 then scale width to 200
- new_size = [200, 200]
+ def get_fit_to_square_size(self, size, new_size):
+ print 'get_fit_to_square_size(self, size=%s, new_size%s)' %
(str(size), str(new_size))
try:
+ scaled_size = [new_size[0], new_size[1]]
+ ### if aspect ratio > 1 then scale width
if size[0] > size[1]:
- new_size[0] = 200
- new_size[1] = new_size[0] * size[1] / size[0]
+ scaled_size[1] = new_size[0] * size[1] / size[0]
### else scale height to 200
else:
- new_size[1] = 200
- new_size[0] = new_size[1] * size[0] / size[1]
+ scaled_size[0] = new_size[1] * size[0] / size[1]
except ZeroDivisionError:
pass
- return new_size
+ return scaled_size
def get_scaled_image_and_size(self, filepath, size):
'''
Returns the location of a scaled image and size of the scaled image
as a 2-tuple. Eg. ("/var/cache/freevo/test.jpg", [200, 150]).
The image will be scaled only if it larger than a certain prefixed
- size. May be in future the prefixed image size could be a config
+ size. May be in future the prefixed image size could be a config
variable.
'''
threshold_size = [800, 600]
- new_size = self.get_fit_to_square_size(size)
+ if hasattr(config, 'WWW_IMAGE_THRESHOLD'):
+ threshold_size = config.WWW_IMAGE_THRESHOLD
+ new_size = [200, 200]
+ if hasattr(config, 'WWW_IMAGE_SIZE'):
+ new_size = config.WWW_IMAGE_SIZE
+ new_size = self.get_fit_to_square_size(size, new_size)
scaled_image_path = self.cache_dir + filepath.replace("/",
"_").replace(".", "_") + ".jpg"
- if not os.path.exists(scaled_image_path):
- if size[0] > threshold_size[0] or size[1] > threshold_size[1]:
+
+ # if the size of image falls below threshold size then use original
image
+ if size[0] < threshold_size[0] and size[1] < threshold_size[1]:
+ scaled_image_path = filepath
+ else:
+ create_scaled_image = False
+ if os.path.exists(scaled_image_path):
+ # if the scaled image already exists then make sure it is
scaled to the correct size
+ new_image = imlib2.open(scaled_image_path)
+ if new_image.width != new_size[0] or new_image.height !=
new_size[1]:
+ os.remove(scaled_image_path)
+ create_scaled_image = True
+ else:
+ create_scaled_image = True
+
+ if create_scaled_image:
image = imlib2.open(filepath)
new_image = image.scale(new_size)
new_image.save(scaled_image_path)
- else:
- scaled_image_path = filepath
+
scaled_image_path = self.convert_dir(scaled_image_path)
return (scaled_image_path, new_size)
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Freevo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-devel