From e693ef60cd8f79e11ae4de3ba2f7494a72fc35c2 Mon Sep 17 00:00:00 2001 From: rvelices Date: Tue, 17 Jan 2012 06:09:32 +0000 Subject: feature 2548 multisize - ability to choose displayed size on index page -added some logs on i.php (configurable) to measure the perf git-svn-id: http://piwigo.org/svn/trunk@12908 68402e56-0260-453c-a942-63ccdbb3a9ee --- i.php | 63 +++++++++++++++++++++++++++++++-- include/category_default.inc.php | 49 +++++++++---------------- include/config_default.inc.php | 5 ++- include/derivative.inc.php | 12 ++----- include/derivative_params.inc.php | 10 ++++++ include/template.class.php | 7 +++- index.php | 32 ++++++++++++++++- themes/default/iconset.css | 1 + themes/default/s26/outline_005e89.png | Bin 1952 -> 2042 bytes themes/default/s26/outline_808060.png | Bin 1952 -> 2042 bytes themes/default/s26/outline_808080.png | Bin 2477 -> 2556 bytes themes/default/s26/outline_ff3363.png | Bin 1952 -> 2042 bytes themes/default/s26/outline_ff7700.png | Bin 1952 -> 2042 bytes themes/default/s26/outline_ffff80.png | Bin 1952 -> 2042 bytes themes/default/s26/outline_ffffff.png | Bin 2169 -> 2247 bytes themes/default/template/index.tpl | 33 +++++++++++++++++ themes/default/template/thumbnails.tpl | 21 +++++++++-- themes/default/theme.css | 5 +-- 18 files changed, 183 insertions(+), 55 deletions(-) diff --git a/i.php b/i.php index fb2dbc93a..1911d77ab 100644 --- a/i.php +++ b/i.php @@ -28,6 +28,13 @@ include(PHPWG_ROOT_PATH . 'include/config_default.inc.php'); defined('PWG_LOCAL_DIR') or define('PWG_LOCAL_DIR', 'local/'); defined('PWG_DERIVATIVE_DIR') or define('PWG_DERIVATIVE_DIR', $conf['data_location'].'i/'); +function get_moment() +{ + $t1 = explode( ' ', microtime() ); + $t2 = explode( '.', $t1[0] ); + $t2 = $t1[1].'.'.$t2[1]; + return $t2; +} function trigger_action() {} function get_extension( $filename ) { @@ -63,6 +70,31 @@ function mkgetdir($dir) // end fast bootstrap +function ilog() +{ + global $conf, $ilogfh; + if (!$conf['enable_i_log']) return; + if(!$ilogfh) + { + $dir=PHPWG_ROOT_PATH.$conf['data_location'].'tmp/'; + if (!mkgetdir($dir) or ! ($ilogfh=fopen($dir.'i.log', 'a')) ) + return; + } + fwrite($ilogfh, date("c") ); + foreach( func_get_args() as $arg) + { + fwrite($ilogfh, ' ' ); + if (is_array($arg)) + { + fwrite($ilogfh, implode(' ', $arg) ); + } + else + { + fwrite($ilogfh, $arg); + } + } + fwrite($ilogfh, "\n"); +} function ierror($msg, $code) { @@ -92,6 +124,12 @@ function ierror($msg, $code) exit; } +function time_step( &$step ) +{ + $tmp = $step; + $step = get_moment(); + return intval(1000*($step - $tmp)); +} function parse_request() { @@ -159,12 +197,11 @@ function parse_request() } } array_shift($deriv); - $page['coi'] = ''; if (count($deriv) && $deriv[0][0]=='c' && $deriv[0][1]=='i') { $page['coi'] = substr(array_shift($deriv), 2); - preg_match('#^[a-z]{4}$#', $page['coi']) or ierror('Invalid center of interest', 400); + preg_match('#^[a-zA-Z]{4}$#', $page['coi']) or ierror('Invalid center of interest', 400); } if ($page['derivative_type'] == IMG_CUSTOM) @@ -187,7 +224,8 @@ function parse_request() } } - if ($req[0]!='g' && $req[0]!='u') + if (!is_file(PHPWG_ROOT_PATH.$req.$ext) and + is_file(PHPWG_ROOT_PATH.'../'.$req.$ext) ) $req = '../'.$req; $page['src_location'] = $req.$ext; @@ -225,6 +263,12 @@ function send_derivative($expires) $page=array(); +$begin = $step = get_moment(); +$timing=array(); +foreach( explode(',','load,rotate,crop,scale,sharpen,watermark,save,send') as $k ) +{ + $timing[$k] = ''; +} include_once( PHPWG_ROOT_PATH .'/include/derivative_params.inc.php'); include_once( PHPWG_ROOT_PATH .'/include/derivative_std_params.inc.php'); @@ -287,6 +331,7 @@ ignore_user_abort(true); set_time_limit(0); $image = new pwg_image($page['src_path']); +$timing['load'] = time_step($step); $changes = 0; @@ -299,6 +344,7 @@ if ($crop_rect) { $changes++; $image->crop( $crop_rect->width(), $crop_rect->height(), $crop_rect->l, $crop_rect->t); + $timing['crop'] = time_step($step); } if ($scaled_size) @@ -306,11 +352,13 @@ if ($scaled_size) $changes++; $image->resize( $scaled_size[0], $scaled_size[1] ); $d_size = $scaled_size; + $timing['scale'] = time_step($step); } if ($params->sharpen) { $changes += $image->sharpen( $params->sharpen ); + $timing['sharpen'] = time_step($step); } if ($params->use_watermark) @@ -345,6 +393,7 @@ if ($params->use_watermark) } } $wm_image->destroy(); + $timing['watermark'] = time_step($step); } // no change required - redirect to source @@ -357,6 +406,14 @@ if (!$changes) $image->set_compression_quality( $params->quality ); $image->write( $page['derivative_path'] ); $image->destroy(); +$timing['save'] = time_step($step); send_derivative($expires); +$timing['send'] = time_step($step); + +ilog('perf', + basename($page['src_path']), $o_size, $o_size[0]*$o_size[1], + basename($page['derivative_path']), $d_size, $d_size[0]*$d_size[1], + time_step($begin), + $timing); ?> \ No newline at end of file diff --git a/include/category_default.inc.php b/include/category_default.inc.php index 8d2cd050b..18a4cb4bf 100644 --- a/include/category_default.inc.php +++ b/include/category_default.inc.php @@ -2,7 +2,7 @@ // +-----------------------------------------------------------------------+ // | Piwigo - a PHP based photo gallery | // +-----------------------------------------------------------------------+ -// | Copyright(C) 2008-2011 Piwigo Team http://piwigo.org | +// | Copyright(C) 2008-2012 Piwigo Team http://piwigo.org | // | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | // | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | // +-----------------------------------------------------------------------+ @@ -104,38 +104,21 @@ foreach ($pictures as $row) array('start') ); - if (isset($nb_comments_of) ) + if (isset($nb_comments_of)) { - $row['nb_comments'] = (int)@$nb_comments_of[$row['id']]; + $row['NB_COMMENTS'] = $row['nb_comments'] = (int)@$nb_comments_of[$row['id']]; } $name = get_picture_title($row); - $tpl_var = array( - 'ID' => $row['id'], + $tpl_var = array_merge( $row, array( 'TN_SRC' => DerivativeImage::thumb_url($row), 'TN_ALT' => htmlspecialchars(strip_tags($name)), 'TN_TITLE' => get_thumbnail_title($row), 'URL' => $url, + 'src_image' => new SrcImage($row), + ) ); - // Extra fields for usage in extra themes - 'FILE_PATH' => $row['path'], - 'FILE_POSTED' => $row['date_available'], - 'FILE_CREATED' => $row['date_creation'], - 'FILE_DESC' => $row['comment'], - 'FILE_AUTHOR' => $row['author'], - 'FILE_HIT' => $row['hit'], - 'FILE_SIZE' => $row['filesize'], - 'FILE_WIDTH' => $row['width'], - 'FILE_HEIGHT' => $row['height'], - 'FILE_METADATE' => $row['date_metadata_update'], - 'FILE_HAS_HD' => $row['has_high'], - 'FILE_HD_WIDTH' => $row['high_width'], - 'FILE_HD_HEIGHT' => $row['high_height'], - 'FILE_HD_FILESIZE' => $row['high_filesize'], - 'FILE_RATING_SCORE' => $row['rating_score'], - ); - if ($conf['index_new_icon']) { $tpl_var['icon_ts'] = get_icon($row['date_available']); @@ -145,7 +128,7 @@ foreach ($pictures as $row) { $tpl_var['NB_HITS'] = $row['hit']; } - + switch ($page['section']) { case 'best_rated' : @@ -162,22 +145,22 @@ foreach ($pictures as $row) break; } } - - $tpl_var['NAME'] = $name; - - if (isset($row['nb_comments'])) - { - $tpl_var['NB_COMMENTS'] = $row['nb_comments']; - } + $tpl_var['NAME'] = $name; $tpl_thumbnails_var[] = $tpl_var; } -$template->assign('SHOW_THUMBNAIL_CAPTION', $conf['show_thumbnail_caption']); +$derivative_params = ImageStdParams::get_by_type( pwg_get_session_var('index_deriv', IMG_THUMB) ); + +$template->assign( array( + 'derivative_params' =>$derivative_params, + 'SHOW_THUMBNAIL_CAPTION' =>$conf['show_thumbnail_caption'], + ) ); $tpl_thumbnails_var = trigger_event('loc_end_index_thumbnails', $tpl_thumbnails_var, $pictures); $template->assign('thumbnails', $tpl_thumbnails_var); $template->assign_var_from_handle('THUMBNAILS', 'index_thumbnails'); - +unset($pictures, $selection, $tpl_thumbnails_var); +$template->clear_assign( array('thumbnails') ); pwg_debug('end include/category_default.inc.php'); ?> \ No newline at end of file diff --git a/include/config_default.inc.php b/include/config_default.inc.php index c1329b96f..dad6e9b20 100644 --- a/include/config_default.inc.php +++ b/include/config_default.inc.php @@ -2,7 +2,7 @@ // +-----------------------------------------------------------------------+ // | Piwigo - a PHP based photo gallery | // +-----------------------------------------------------------------------+ -// | Copyright(C) 2008-2011 Piwigo Team http://piwigo.org | +// | Copyright(C) 2008-2012 Piwigo Team http://piwigo.org | // | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | // | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | // +-----------------------------------------------------------------------+ @@ -467,6 +467,9 @@ $conf['template_combine_files'] = true; // gives an empty value '' to deactivate $conf['show_php_errors'] = E_ALL; +// enable log for i derivative script +$conf['enable_i_log'] = false; + // +-----------------------------------------------------------------------+ // | authentication | // +-----------------------------------------------------------------------+ diff --git a/include/derivative.inc.php b/include/derivative.inc.php index d15e7eff3..1f5152dd3 100644 --- a/include/derivative.inc.php +++ b/include/derivative.inc.php @@ -100,8 +100,6 @@ final class DerivativeImage public $src_image; - private $requested_type; - private $flags = 0; private $params; private $rel_path, $rel_url; @@ -111,12 +109,10 @@ final class DerivativeImage $this->src_image = $src_image; if (is_string($type)) { - $this->requested_type = $type; $this->params = ImageStdParams::get_by_type($type); } else { - $this->requested_type = IMG_CUSTOM; $this->params = $type; } @@ -125,14 +121,12 @@ final class DerivativeImage static function thumb_url($infos) { - $src_image = new SrcImage($infos); - self::build($src_image, ImageStdParams::get_by_type(IMG_THUMB), $rel_path, $rel_url); - return get_root_url().$rel_url; + return self::url(IMG_THUMB, $infos); } static function url($type, $infos) { - $src_image = new SrcImage($infos); + $src_image = is_object($infos) ? $infos : new SrcImage($infos); $params = is_string($type) ? ImageStdParams::get_by_type($type) : $type; self::build($src_image, $params, $rel_path, $rel_url); return get_root_url().$rel_url; @@ -257,7 +251,7 @@ final class DerivativeImage $size = $this->get_size(); if ($size) { - return 'width="'.$size[0].'" height="'.$size[1].'"'; + return 'width='.$size[0].' height='.$size[1]; } } diff --git a/include/derivative_params.inc.php b/include/derivative_params.inc.php index 569c4ace1..30497639f 100644 --- a/include/derivative_params.inc.php +++ b/include/derivative_params.inc.php @@ -315,6 +315,16 @@ final class DerivativeParams return $scale_size != null ? $scale_size : $in_size; } + function max_width() + { + return $this->sizing->ideal_size[0]; + } + + function max_height() + { + return $this->sizing->ideal_size[1]; + } + function is_identity($in_size) { if ($in_size[0] > $this->sizing->ideal_size[0] or diff --git a/include/template.class.php b/include/template.class.php index b6d1aa4ba..7bcab1150 100644 --- a/include/template.class.php +++ b/include/template.class.php @@ -2,7 +2,7 @@ // +-----------------------------------------------------------------------+ // | Piwigo - a PHP based photo gallery | // +-----------------------------------------------------------------------+ -// | Copyright(C) 2008-2011 Piwigo Team http://piwigo.org | +// | Copyright(C) 2008-2012 Piwigo Team http://piwigo.org | // | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | // | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | // +-----------------------------------------------------------------------+ @@ -842,6 +842,11 @@ class PwgTemplateAdapter $args = func_get_args(); return call_user_func_array('sprintf', $args ); } + + function derivative_url($type, $img) + { + return DerivativeImage::url($type, $img); + } } diff --git a/index.php b/index.php index ffabff88b..0af394c66 100644 --- a/index.php +++ b/index.php @@ -2,7 +2,7 @@ // +-----------------------------------------------------------------------+ // | Piwigo - a PHP based photo gallery | // +-----------------------------------------------------------------------+ -// | Copyright(C) 2008-2011 Piwigo Team http://piwigo.org | +// | Copyright(C) 2008-2012 Piwigo Team http://piwigo.org | // | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | // | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | // +-----------------------------------------------------------------------+ @@ -60,6 +60,14 @@ if (isset($_GET['image_order'])) ) ); } +if (isset($_GET['display'])) +{ + $page['meta_robots']['noindex']=1; + if (array_key_exists($_GET['display'], ImageStdParams::get_defined_type_map())) + { + pwg_set_session_var('index_deriv', $_GET['display']); + } +} //-------------------------------------------------------------- initialization $page['navigation_bar'] = array(); @@ -252,6 +260,28 @@ if ( $conf['index_sort_order_input'] } } +if ( count($page['items']) > 0 ) +{ + $url = add_url_params( + duplicate_index_url(), + array('display' => '') + ); + $selected_type = pwg_get_session_var('index_deriv', IMG_THUMB); + $type_map = ImageStdParams::get_defined_type_map(); + unset($type_map[IMG_XXLARGE], $type_map[IMG_XLARGE]); + foreach($type_map as $params) + { + $template->append( + 'image_derivatives', + array( + 'DISPLAY' => l10n($params->type), + 'URL' => $url.$params->type, + 'SELECTED' => ($params->type == $selected_type ? true:false), + ) + ); + } +} + // category comment if ($page['start']==0 and !isset($page['chronology_field']) and !empty($page['comment']) ) { diff --git a/themes/default/iconset.css b/themes/default/iconset.css index 976f2ce0f..9a7bd464a 100644 --- a/themes/default/iconset.css +++ b/themes/default/iconset.css @@ -37,6 +37,7 @@ .pwg-icon-close {background-position: 0 -52px} .pwg-icon-category-edit {background-position: -26px -52px} .pwg-icon-sort {background-position: -52px -52px} +.pwg-icon-sizes {background-position: -78px -52px} .pwg-icon-category-view-normal {background-position: -156px -52px} .pwg-icon-category-view-flat {background-position: -182px -52px} diff --git a/themes/default/s26/outline_005e89.png b/themes/default/s26/outline_005e89.png index 0e411a152..ee114abe9 100644 Binary files a/themes/default/s26/outline_005e89.png and b/themes/default/s26/outline_005e89.png differ diff --git a/themes/default/s26/outline_808060.png b/themes/default/s26/outline_808060.png index 01d1f18df..351cf4149 100644 Binary files a/themes/default/s26/outline_808060.png and b/themes/default/s26/outline_808060.png differ diff --git a/themes/default/s26/outline_808080.png b/themes/default/s26/outline_808080.png index d51b3b44c..c7a89c270 100644 Binary files a/themes/default/s26/outline_808080.png and b/themes/default/s26/outline_808080.png differ diff --git a/themes/default/s26/outline_ff3363.png b/themes/default/s26/outline_ff3363.png index 9a5aef891..bb2224f39 100644 Binary files a/themes/default/s26/outline_ff3363.png and b/themes/default/s26/outline_ff3363.png differ diff --git a/themes/default/s26/outline_ff7700.png b/themes/default/s26/outline_ff7700.png index 45caa0dc3..6cbec3fdf 100644 Binary files a/themes/default/s26/outline_ff7700.png and b/themes/default/s26/outline_ff7700.png differ diff --git a/themes/default/s26/outline_ffff80.png b/themes/default/s26/outline_ffff80.png index 0f54e2e46..66734159b 100644 Binary files a/themes/default/s26/outline_ffff80.png and b/themes/default/s26/outline_ffff80.png differ diff --git a/themes/default/s26/outline_ffffff.png b/themes/default/s26/outline_ffffff.png index 338aa82b5..d9ac061cd 100644 Binary files a/themes/default/s26/outline_ffffff.png and b/themes/default/s26/outline_ffffff.png differ diff --git a/themes/default/template/index.tpl b/themes/default/template/index.tpl index bac0125e5..5f0853071 100644 --- a/themes/default/template/index.tpl +++ b/themes/default/template/index.tpl @@ -35,6 +35,39 @@ function toggleSortOrderBox() {/literal}{/footer_script} {/strip} {/if} + +{if !empty($image_derivatives)} +
  • {strip} +  {'Photo Sizes'|@translate} + + + {footer_script}{literal} +function toggleImageDerivativesBox() +{ + var elt = document.getElementById("derivativeSwitchBox"), + ePos = document.getElementById("derivativeChooseLink"); + if (elt.style.display==="none") + { + elt.style.position = "absolute"; + elt.style.left = (ePos.offsetLeft) + "px"; + elt.style.top = (ePos.offsetTop + ePos.offsetHeight) + "px"; + elt.style.display=""; + } + else + elt.style.display="none"; +} + {/literal}{/footer_script} + {/strip}
  • +{/if} + {if isset($favorite)}
  •  {'delete all photos from your favorites'|@translate} diff --git a/themes/default/template/thumbnails.tpl b/themes/default/template/thumbnails.tpl index 75033a436..fec76214e 100644 --- a/themes/default/template/thumbnails.tpl +++ b/themes/default/template/thumbnails.tpl @@ -1,10 +1,25 @@ -{if !empty($thumbnails)} -{strip}{foreach from=$thumbnails item=thumbnail} +{if !empty($thumbnails)}{strip} +{html_head} + +{/html_head} +{foreach from=$thumbnails item=thumbnail}
  • - {$thumbnail.TN_ALT} + {$thumbnail.TN_ALT} {if $SHOW_THUMBNAIL_CAPTION } diff --git a/themes/default/theme.css b/themes/default/theme.css index 2b43be418..b8f919c43 100644 --- a/themes/default/theme.css +++ b/themes/default/theme.css @@ -685,13 +685,10 @@ IMG.ui-datepicker-trigger { } /* Set some sizes according to your maximum thumbnail width and height */ -.thumbnails SPAN, -.thumbnails .wrap2 A, -.thumbnails LABEL, .thumbnailCategory DIV.illustration { width: 140px; /* max thumbnail width + 2px */ } -.thumbnails .wrap2, + .content .thumbnailCategory .description { height: 140px; /* max thumbnail height + 2px */ } -- cgit v1.2.3