Hi Duncan,
Here is another patch (hopefully the last one) that fixes the following issues:
* Images with spaces in the filename or in the directories are not
being displayed properly (see Wout's issue)
* Since the WWW_IMAGE_THUMBNAIL_SIZE is a tuple of 2 values, I decided
to change get_fit_to_square_size() to get_fit_to_rectangle_size()
which makes more sense if a user wants to fit images in a specific
rectangular area (see Ryan's issue).
* I fixed the issue where you mentioned that converting PNG files may
have issues (or loose value) if they are converted to JPGs. The fix
basically uses the same extension except for GIF (reasons follow
below)
While fixing issue 3 I found that imlib has problems scaling (a file
is not created and I do not see any exceptions) a file if
1. The file has .gif extension. So for .gif files, I scale the image
with .jpg extension attached to it.
2. I found that files with extension in capital (eg. .JPG instead of
.jpg) are not scaled by imlib. I have several files with .JPG
extensions and they are not created by imlib.save(). So I decided to
change them to lower case. Not sure if it happens to all file
extensions or specifically to jpgs.
If you know why I am seeing these issues let me know.
Chandan
On 1/2/07, Chandan Pitta <[EMAIL PROTECTED]> wrote:
It should be (100, 100).
On 1/2/07, Ryan Roth <[EMAIL PROTECTED]> wrote:
> o should it be set to ( 100, 100 ) or just ( 100 ) ?
>
> Chandan Pitta wrote:
> > Hello Ryan,
> >
> > It seems to be working for me. I am wondering if you are expecting all
> > your images to be scaled to 100 x 75. If that is true than the
> > assumption is wrong. The webserver currently expects the thumbnail
> > size to be a square so you should be using 100x100. And all your
> > images will be scaled to fit in that square while maintaining aspect
> > ratio. If you want the images to fit to the rectangle instead (while
> > maintaining aspect ratio) then try this patch.
> >
> > Index: src/www/htdocs/library.rpy
> > ===================================================================
> > --- src/www/htdocs/library.rpy (revision 8911)
> > +++ src/www/htdocs/library.rpy (working copy)
> > @@ -605,13 +605,13 @@
> > new_height = 200
> > return (int(new_width), int(new_height + 0.5))
> >
> > - 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))
> > + def get_fit_to_rectangle_size(self, size, new_size):
> > + print 'get_fit_to_rectangle_size(self, size=%s, new_size=%s)'
> > % (str(size), str(new_size))
> > try:
> > scaled_width = new_size[0]
> > scaled_height = new_size[1]
> > - ### if aspect ratio > 1 then scale height
> > - if size[0] > size[1]:
> > + ### if actual image aspect ratio > scaled image aspect
> > ratio then scale height
> > + if float(size[0]) / size[1] > float(scaled_width) /
scaled_height:
> > scaled_height = scaled_width * size[1] / size[0]
> > ### else scale width
> > else:
> > @@ -631,7 +631,7 @@
> > print 'get_scaled_image_and_size(self, filepath=%r, size=%s)'
> > % (filepath, str(size))
> > threshold_size = config.WWW_IMAGE_THRESHOLD_SIZE
> > new_size = config.WWW_IMAGE_THUMBNAIL_SIZE
> > - new_size = self.get_fit_to_square_size(size, new_size)
> > + new_size = self.get_fit_to_rectangle_size(size, new_size)
> > scaled_image_path = self.cache_dir + filepath.replace("/",
> > "_").replace(".", "_") + ".jpg"
> >
> > # if the size of image falls below threshold size then use
> > original image
> >
> > Thanks
> > Chandan
> >
> >
> >
> > On 1/2/07, Ryan Roth <[EMAIL PROTECTED]> wrote:
> >
> >> I have WWW_IMAGE_THUMBNAIL_SIZE = (100, 75) set in my local_conf, but I
> >> don't seethat it is doing anything. Do I have it set right?
> >>
> >> Thanks
> >>
> >>
> >> -------------------------------------------------------------------------
> >> 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 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)
-------------------------------------------------------------------------
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