improve image scaling (fixes #59)
* add width and height to AJAX result * handle preview image width and height changes * improve default_horizontal theme's css to handle vertical images
This commit is contained in:
		
							parent
							
								
									922d234f11
								
							
						
					
					
						commit
						62d1ba55fe
					
				
					 4 changed files with 43 additions and 27 deletions
				
			
		|  | @ -32,6 +32,10 @@ define(IMAGESEC, "images"); | ||||||
| define(GALLERYSEC, "gallery"); | define(GALLERYSEC, "gallery"); | ||||||
| define(GALLERY_RE, '/^[\w\d _-]+$/'); | define(GALLERY_RE, '/^[\w\d _-]+$/'); | ||||||
| 
 | 
 | ||||||
|  | define(SCALE_WIDTH, 0); | ||||||
|  | define(SCALE_HEIGHT, 1); | ||||||
|  | define(SCALE_BOTH, 2); | ||||||
|  | 
 | ||||||
| $basedir = realpath(implode(DIRECTORY_SEPARATOR, array(dirname(__file__), '..'))); | $basedir = realpath(implode(DIRECTORY_SEPARATOR, array(dirname(__file__), '..'))); | ||||||
| $inifile = implode(DIRECTORY_SEPARATOR, array($basedir, 'gallery.ini')); | $inifile = implode(DIRECTORY_SEPARATOR, array($basedir, 'gallery.ini')); | ||||||
| 
 | 
 | ||||||
|  | @ -118,11 +122,14 @@ function getImageInfo($galleryname, $imagename) { | ||||||
| 
 | 
 | ||||||
|   $label = getImageLabel($galleryname, $imagename); |   $label = getImageLabel($galleryname, $imagename); | ||||||
|   $gallerylabel = getGalleryLabel($galleryname); |   $gallerylabel = getGalleryLabel($galleryname); | ||||||
|  |   $scaledimage = getScaledImage($galleryname, $imagename, | ||||||
|  |                                 $theme->previewsize, SCALE_BOTH); | ||||||
|  |   $scaledsize = getimagesize($configuration['gallerydir'] . | ||||||
|  |                              DIRECTORY_SEPARATOR . $scaledimage);   | ||||||
|   return array("name" => $imagename, |   return array("name" => $imagename, | ||||||
|                "label" => $label, |                "label" => $label, | ||||||
|                "preview" => $configuration['gallerypath'] . '/' . |                "preview" => array($configuration['gallerypath'] . '/' . | ||||||
|                getScaledImage($galleryname, $imagename, |                                   $scaledimage, $scaledsize[0], $scaledsize[1]), | ||||||
|                               $theme->previewsize, false), |  | ||||||
|                "full" => implode('/', array($configuration['gallerypath'], |                "full" => implode('/', array($configuration['gallerypath'], | ||||||
|                                             $galleryname, $imagename)), |                                             $galleryname, $imagename)), | ||||||
|                "title" => sprintf("%s :: %s", $gallerylabel, $label) |                "title" => sprintf("%s :: %s", $gallerylabel, $label) | ||||||
|  | @ -229,13 +236,31 @@ function getCurrentGallery() { | ||||||
|  * |  * | ||||||
|  * @return Pfad des skalierten Bildes relativ zu @a gallerydir |  * @return Pfad des skalierten Bildes relativ zu @a gallerydir | ||||||
|  */ |  */ | ||||||
| function getScaledImage($galleryname, $basename, $maxdim, $scaleheight=true) { | function getScaledImage($galleryname, $basename, $maxdim, $scaletype) { | ||||||
|   global $configuration; |   global $configuration; | ||||||
| 
 | 
 | ||||||
|   if ($maxdim == 0) { |   if ($maxdim == 0) { | ||||||
|     debug_print_backtrace(); |     debug_print_backtrace(); | ||||||
|   } |   } | ||||||
|   $gallerydir = realpath($configuration['gallerydir'] . DIRECTORY_SEPARATOR . $galleryname); |   $gallerydir = realpath($configuration['gallerydir'] . DIRECTORY_SEPARATOR . $galleryname); | ||||||
|  |   $originalfile = $gallerydir . DIRECTORY_SEPARATOR . $basename; | ||||||
|  |   switch($scaletype) { | ||||||
|  |   case SCALE_WIDTH: | ||||||
|  |     $scaleheight = false; | ||||||
|  |     break; | ||||||
|  |   case SCALE_HEIGHT: | ||||||
|  |     $scaleheight = true; | ||||||
|  |     break; | ||||||
|  |   case SCALE_BOTH: | ||||||
|  |     $originalsize = getimagesize($originalfile); | ||||||
|  |     $scaleheight = ($originalsize[1] > $originalsize[0]); | ||||||
|  |     break; | ||||||
|  |   default: | ||||||
|  |     header('Content-Type: text/plain'); | ||||||
|  |     debug_print_backtrace(); | ||||||
|  |     die('Unknown scaletype'); | ||||||
|  |   } | ||||||
|  |    | ||||||
|   if ($scaleheight) { |   if ($scaleheight) { | ||||||
|     $scaleddir = sprintf("scaled_x%d", $maxdim); |     $scaleddir = sprintf("scaled_x%d", $maxdim); | ||||||
|   } else { |   } else { | ||||||
|  | @ -256,7 +281,6 @@ function getScaledImage($galleryname, $basename, $maxdim, $scaleheight=true) { | ||||||
|   $scaledimage = $scaleddirpath . DIRECTORY_SEPARATOR . $basename; |   $scaledimage = $scaleddirpath . DIRECTORY_SEPARATOR . $basename; | ||||||
|   if (!is_file($scaledimage)) { |   if (!is_file($scaledimage)) { | ||||||
|     // Datei erzeugen
 |     // Datei erzeugen
 | ||||||
|     $originalfile = $gallerydir . DIRECTORY_SEPARATOR . $basename; |  | ||||||
|     $origimage = imagecreatefromjpeg($originalfile); |     $origimage = imagecreatefromjpeg($originalfile); | ||||||
|     $origx = imagesx($origimage); |     $origx = imagesx($origimage); | ||||||
|     $origy = imagesy($origimage); |     $origy = imagesy($origimage); | ||||||
|  | @ -293,17 +317,13 @@ function getThumbNailInfo($galleryname) { | ||||||
| 
 | 
 | ||||||
|   $thumbsizes = array(); |   $thumbsizes = array(); | ||||||
|   $thumbdimsum = 2; |   $thumbdimsum = 2; | ||||||
|  |   $scaletype = ($theme->themetype == 'horizontal') ? SCALE_HEIGHT : SCALE_WIDTH; | ||||||
|   foreach (glob(realpath($configuration['gallerydir'] . DIRECTORY_SEPARATOR . |   foreach (glob(realpath($configuration['gallerydir'] . DIRECTORY_SEPARATOR . | ||||||
|                          $galleryname) . DIRECTORY_SEPARATOR . |                          $galleryname) . DIRECTORY_SEPARATOR . | ||||||
|                 '*.jp{e,}g', GLOB_BRACE) as $filename) { |                 '*.jp{e,}g', GLOB_BRACE) as $filename) { | ||||||
|     $basename = basename($filename); |     $basename = basename($filename); | ||||||
|     if ($theme->themetype == 'horizontal') { |  | ||||||
|     $thumbfile = getScaledImage($galleryname, $basename, $theme->thumbsize, |     $thumbfile = getScaledImage($galleryname, $basename, $theme->thumbsize, | ||||||
|                                   true); |                                 $scaletype); | ||||||
|     } else { |  | ||||||
|       $thumbfile = getScaledImage($galleryname, $basename, $theme->thumbsize, |  | ||||||
|                                   false); |  | ||||||
|     } |  | ||||||
|     if ($thumbsize = getimagesize(realpath($configuration['gallerydir'] . |     if ($thumbsize = getimagesize(realpath($configuration['gallerydir'] . | ||||||
|                                            DIRECTORY_SEPARATOR . |                                            DIRECTORY_SEPARATOR . | ||||||
|                                            $thumbfile))) { |                                            $thumbfile))) { | ||||||
|  | @ -406,7 +426,7 @@ function getFirstPreview(&$thumbinfo) { | ||||||
|   $galleryname = $thumbinfo[1]; |   $galleryname = $thumbinfo[1]; | ||||||
|   $fullname = $configuration['gallerypath'] . '/' . $galleryname . '/' . $basename; |   $fullname = $configuration['gallerypath'] . '/' . $galleryname . '/' . $basename; | ||||||
|   $scaledimage = getScaledImage($galleryname, $basename, |   $scaledimage = getScaledImage($galleryname, $basename, | ||||||
|                                 $theme->previewsize, false); |                                 $theme->previewsize, SCALE_BOTH); | ||||||
|   $scaledimagesize = getimagesize(realpath($configuration['gallerydir'] . |   $scaledimagesize = getimagesize(realpath($configuration['gallerydir'] . | ||||||
|                                            DIRECTORY_SEPARATOR . |                                            DIRECTORY_SEPARATOR . | ||||||
|                                            $scaledimage)); |                                            $scaledimage)); | ||||||
|  |  | ||||||
|  | @ -56,10 +56,8 @@ function updateContentImage(pathParts) { | ||||||
|         "galleryname" : pathParts.gallery |         "galleryname" : pathParts.gallery | ||||||
|     }, function(data, textStatus) { |     }, function(data, textStatus) { | ||||||
|         $("#imagedescription").text(data["label"]); |         $("#imagedescription").text(data["label"]); | ||||||
|         $("#content_main img").attr("alt", data["label"]); |         $('#content_main img').attr('alt', data.label).attr('src', data.preview[0]).attr('width', data.preview[1]).attr('height', data.preview[2]); | ||||||
|         $("#content_main img").attr("src", data["preview"]); |         $("#content_main a").attr("href", data["full"]).attr("title", data["label"]); | ||||||
|         $("#content_main a").attr("href", data["full"]); |  | ||||||
|         $("#content_main a").attr("title", data["label"]); |  | ||||||
|         document.title = data["title"]; |         document.title = data["title"]; | ||||||
|     }, 'json'); |     }, 'json'); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| /* | git sta/* | ||||||
|  * Copyright (c) 2008 Jan Dittberner <jan@dittberner.info> |  * Copyright (c) 2008 Jan Dittberner <jan@dittberner.info> | ||||||
|  * Jan Dittberner IT-Consulting & -Solutions |  * Jan Dittberner IT-Consulting & -Solutions | ||||||
|  * Cottbuser Str. 1, D-01129 Dresden |  * Cottbuser Str. 1, D-01129 Dresden | ||||||
|  | @ -66,9 +66,8 @@ a.lightbox img { | ||||||
| } | } | ||||||
| #imagedescription { | #imagedescription { | ||||||
| position:relative; | position:relative; | ||||||
|   weight: 330px; |  | ||||||
|   height: 25px; |   height: 25px; | ||||||
|   top: 300px; |   top: 330px; | ||||||
|   left: 0px; |   left: 0px; | ||||||
|   color: #ffffff; |   color: #ffffff; | ||||||
|   font-size:10px; |   font-size:10px; | ||||||
|  | @ -76,7 +75,6 @@ position:relative; | ||||||
|   font-weight:normal; |   font-weight:normal; | ||||||
|   text-align:center; |   text-align:center; | ||||||
|   vertical-align:center;   |   vertical-align:center;   | ||||||
|    |  | ||||||
| } | } | ||||||
| .imgdescription { | .imgdescription { | ||||||
|   color: #ffffff; |   color: #ffffff; | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
|  * Copyright (c) 2008 Jan Dittberner <jan@dittberner.info> |  * Copyright (c) 2008, 2009 Jan Dittberner <jan@dittberner.info> | ||||||
|  * Jan Dittberner IT-Consulting & -Solutions |  * Jan Dittberner IT-Consulting & -Solutions | ||||||
|  * Cottbuser Str. 1, D-01129 Dresden |  * Cottbuser Str. 1, D-01129 Dresden | ||||||
|  * |  * | ||||||
|  | @ -203,7 +203,7 @@ a:active { | ||||||
| #content_sub { | #content_sub { | ||||||
|    position:absolute; |    position:absolute; | ||||||
|    width:330px; |    width:330px; | ||||||
|    height:330px; |    height:350px; | ||||||
|    left: 143px; |    left: 143px; | ||||||
|    top: 149px; |    top: 149px; | ||||||
| } | } | ||||||
|  | @ -213,7 +213,7 @@ a:active { | ||||||
|    width:20px;  |    width:20px;  | ||||||
|    height:10px;  |    height:10px;  | ||||||
|    left: 298px; |    left: 298px; | ||||||
|    top: 305.5px; |    top: 330px; | ||||||
|    z-index:1; |    z-index:1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -221,8 +221,8 @@ a:active { | ||||||
|    position:absolute; |    position:absolute; | ||||||
|    width:311px; |    width:311px; | ||||||
|    height:311px; |    height:311px; | ||||||
|    top: 9.5px; |    top: 9px; | ||||||
|    left: 9.5px; |    left: 9px; | ||||||
|    text-align:center; |    text-align:center; | ||||||
|    font-weight: normal; |    font-weight: normal; | ||||||
| } | } | ||||||
|  |  | ||||||
		Reference in a new issue