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

Reply via email to