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
