diff options
author | rvelices <rv-github@modusoptimus.com> | 2012-04-14 04:52:20 +0000 |
---|---|---|
committer | rvelices <rv-github@modusoptimus.com> | 2012-04-14 04:52:20 +0000 |
commit | 1b54eb8e9ca1d5ac7d2fc28b37c39bf369bd0729 (patch) | |
tree | 2c61d1f9b020f2e7db58ed20a28dcce648cba570 /include | |
parent | 10bf036231fb219ecb4cc8b6121cfec196da7eef (diff) |
bug 2615 php notice in calendar amd web service
multisize improve handling of cases where the original is smaller than a requested derivative, but rotation/watermarking is required
git-svn-id: http://piwigo.org/svn/trunk@14143 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to 'include')
-rw-r--r-- | include/calendar_monthly.class.php | 6 | ||||
-rw-r--r-- | include/derivative.inc.php | 32 | ||||
-rw-r--r-- | include/ws_functions.inc.php | 2 |
3 files changed, 33 insertions, 7 deletions
diff --git a/include/calendar_monthly.class.php b/include/calendar_monthly.class.php index 37c720bea..1109bbf1c 100644 --- a/include/calendar_monthly.class.php +++ b/include/calendar_monthly.class.php @@ -350,7 +350,7 @@ function build_month_calendar(&$tpl_var) { $page['chronology_date'][CDAY]=$day; $query = ' -SELECT id, file,representative_ext,path,width, height, '.pwg_db_get_dayofweek($this->date_field).'-1 as dow'; +SELECT id, file,representative_ext,path,width,height,rotation, '.pwg_db_get_dayofweek($this->date_field).'-1 as dow'; $query.= $this->inner_sql; $query.= $this->get_date_where(); $query.= ' @@ -392,6 +392,10 @@ SELECT id, file,representative_ext,path,width, height, '.pwg_db_get_dayofweek($t } list($cell_width, $cell_height) = ImageStdParams::get_by_type(IMG_SQUARE)->sizing->ideal_size; + if ($cell_width>120) + { + $cell_width = $cell_height = 120; + } $tpl_weeks = array(); $tpl_crt_week = array(); diff --git a/include/derivative.inc.php b/include/derivative.inc.php index ca840a4d9..f565364f3 100644 --- a/include/derivative.inc.php +++ b/include/derivative.inc.php @@ -26,6 +26,7 @@ final class SrcImage public $id; public $rel_path; + public $rotation = 0; private $size=null; private $flags=0; @@ -58,9 +59,10 @@ final class SrcImage $width = $infos['width']; $height = $infos['height']; + $this->rotation = intval($infos['rotation']) % 4; // 1 or 5 => 90 clockwise // 3 or 7 => 270 clockwise - if ($infos['rotation'] % 2 != 0) + if ($this->rotation % 2) { $width = $infos['height']; $height = $infos['width']; @@ -173,10 +175,30 @@ final class DerivativeImage { if ( $src->has_size() && $params->is_identity( $src->get_size() ) ) { - // todo - what if we have a watermark maybe return a smaller size? - $params = null; - $rel_path = $rel_url = $src->rel_path; - return; + if (!$params->use_watermark && !$src->rotation) + { + $params = null; + $rel_path = $rel_url = $src->rel_path; + return; + } + $defined_types = array_keys(ImageStdParams::get_defined_type_map()); + for ($i=0; $i<count($defined_types); $i++) + { + if ($defined_types[$i] == $params->type) + { + for ($i--; $i>=0; $i--) + { + $smaller = ImageStdParams::get_by_type($defined_types[$i]); + if ($smaller->sizing->max_crop==$params->sizing->max_crop && $smaller->is_identity( $src->get_size() )) + { + $params = $smaller; + self::build($src, $params, $rel_path, $rel_url, $is_cached); + return; + } + } + break; + } + } } $tokens=array(); diff --git a/include/ws_functions.inc.php b/include/ws_functions.inc.php index fd24b1136..31cc8662f 100644 --- a/include/ws_functions.inc.php +++ b/include/ws_functions.inc.php @@ -224,7 +224,7 @@ function ws_getMissingDerivatives($params, &$service) $where_clauses[] = 'id IN ('.implode(',',$params['ids']).')'; } - $query_model = 'SELECT id, path, representative_ext, width, height + $query_model = 'SELECT id, path, representative_ext, width,height,rotation FROM '.IMAGES_TABLE.' WHERE '.implode(' AND ', $where_clauses).' ORDER BY id DESC |