From 40a4dd63f09e96550239c562730ab99e29760bc0 Mon Sep 17 00:00:00 2001 From: rvelices Date: Wed, 2 May 2012 04:29:56 +0000 Subject: multi size: - fix external imagick issues when rotation was required - fix: derivative were generated continuosly until a first save performed in the admin screen - added sharpen param in the new config screen - increased the sharpen range (10% is less than before) git-svn-id: http://piwigo.org/svn/trunk@14649 68402e56-0260-453c-a942-63ccdbb3a9ee --- admin/configuration.php | 10 +---- admin/include/configuration_sizes_process.inc.php | 45 ++++++++++++++--------- admin/include/image.class.php | 19 ++++++++-- admin/themes/default/template/configuration.tpl | 8 ++++ i.php | 2 +- include/derivative_params.inc.php | 3 +- include/derivative_std_params.inc.php | 4 ++ language/en_UK/admin.lang.php | 1 + 8 files changed, 58 insertions(+), 34 deletions(-) diff --git a/admin/configuration.php b/admin/configuration.php index f9e0999e8..60da0ae0e 100644 --- a/admin/configuration.php +++ b/admin/configuration.php @@ -454,8 +454,6 @@ switch ($page['section']) $disabled = array(); } - $common_quality = 50; - $tpl_vars = array(); foreach(ImageStdParams::get_all_types() as $type) { @@ -486,17 +484,11 @@ switch ($page['section']) $tpl_var['minw'] = $tpl_var['minh'] = ""; } $tpl_var['sharpen'] = $params->sharpen; - $tpl_var['quality'] = $params->quality; - - if ($params->quality > $common_quality and $tpl_var['enabled']) - { - $common_quality = $params->quality; - } } $tpl_vars[$type]=$tpl_var; } $template->assign('derivatives', $tpl_vars); - $template->assign('resize_quality', $common_quality); + $template->assign('resize_quality', ImageStdParams::$quality); } break; diff --git a/admin/include/configuration_sizes_process.inc.php b/admin/include/configuration_sizes_process.inc.php index 603103fe1..31153f16b 100644 --- a/admin/include/configuration_sizes_process.inc.php +++ b/admin/include/configuration_sizes_process.inc.php @@ -97,13 +97,13 @@ foreach(ImageStdParams::get_all_types() as $type) { $errors[$type]['w'] = '>0'; } - + $h = intval($pderivative['h']); if ($h <= 0) { $errors[$type]['h'] = '>0'; } - + if (max($w,$h) <= $prev_w) { $errors[$type]['w'] = $errors[$type]['h'] = '>'.$prev_w; @@ -116,24 +116,33 @@ foreach(ImageStdParams::get_all_types() as $type) { $errors[$type]['w'] = '>'.$prev_w; } - + $v = intval($pderivative['h']); if ($v <= 0 or $v <= $prev_h) { $errors[$type]['h'] = '>'.$prev_h; } } - + if (count($errors) == 0) { $prev_w = intval($pderivative['w']); $prev_h = intval($pderivative['h']); } + + $v = intval($pderivative['sharpen']); + if ($v<0 || $v>100) + { + $errors[$type]['sharpen'] = '[0..100]'; + } } // step 3 - save data if (count($errors) == 0) { + $quality_changed = ImageStdParams::$quality != intval($_POST['resize_quality']); + ImageStdParams::$quality = intval($_POST['resize_quality']); + $enabled = ImageStdParams::get_defined_type_map(); $disabled = @unserialize( @$conf['disabled_derivatives'] ); if ($disabled === false) @@ -145,7 +154,7 @@ if (count($errors) == 0) foreach (ImageStdParams::get_all_types() as $type) { $pderivative = $pderivatives[$type]; - + if ($pderivative['enabled']) { $new_params = new DerivativeParams( @@ -155,11 +164,10 @@ if (count($errors) == 0) array(intval($pderivative['minw']), intval($pderivative['minh'])) ) ); - - $new_params->quality = intval($_POST['resize_quality']); - + $new_params->sharpen = intval($pderivative['sharpen']); + ImageStdParams::apply_global($new_params); - + if (isset($enabled[$type])) { $old_params = $enabled[$type]; @@ -169,19 +177,20 @@ if (count($errors) == 0) { $same = false; } - + if ($same and $new_params->sizing->max_crop != 0 and !size_equals($old_params->sizing->min_size, $new_params->sizing->min_size)) { $same = false; } - - if ($new_params->quality != $old_params->quality) + + if ($quality_changed + || $new_params->sharpen != $old_params->sharpen) { $same = false; } - + if (!$same) { $new_params->last_mod_time = time(); @@ -209,7 +218,7 @@ if (count($errors) == 0) } } } - + $enabled_by = array(); // keys ordered by all types foreach(ImageStdParams::get_all_types() as $type) { @@ -218,7 +227,7 @@ if (count($errors) == 0) $enabled_by[$type] = $enabled[$type]; } } - + ImageStdParams::set_and_save($enabled_by); if (count($disabled) == 0) { @@ -230,12 +239,12 @@ if (count($errors) == 0) conf_update_param('disabled_derivatives', addslashes(serialize($disabled)) ); } $conf['disabled_derivatives'] = serialize($disabled); - + if (count($changed_types)) { clear_derivative_cache($changed_types); } - + array_push( $page['infos'], l10n('Your configuration settings are saved') @@ -256,7 +265,7 @@ else ); } } - + $template->assign('derivatives', $pderivatives); $template->assign('ferrors', $errors); $template->assign('resize_quality', $_POST['resize_quality']); diff --git a/admin/include/image.class.php b/admin/include/image.class.php index 062341913..53516f62d 100644 --- a/admin/include/image.class.php +++ b/admin/include/image.class.php @@ -287,8 +287,8 @@ class pwg_image /** Returns a normalized convolution kernel for sharpening*/ static function get_sharpen_matrix($amount) { - // Amount should be in the range of 28-10 - $amount = round(abs(-28 + ($amount * 0.18)), 2); + // Amount should be in the range of 48-10 + $amount = round(abs(-48 + ($amount * 0.38)), 2); $matrix = array( array(-1, -1, -1), @@ -549,6 +549,12 @@ class image_ext_imagick implements imageInterface function rotate($rotation) { + if ($rotation==90 || $rotation==270) + { + $tmp = $this->width; + $this->width = $this->height; + $this->height = $tmp; + } $this->add_command('rotate', -$rotation); $this->add_command('orient', 'top-left'); return true; @@ -562,7 +568,6 @@ class image_ext_imagick implements imageInterface function resize($width, $height) { - $this->add_command('interlace', 'line'); $this->add_command('filter', 'Lanczos'); $this->add_command('resize', $width.'x'.$height.'!'); return true; @@ -595,6 +600,8 @@ class image_ext_imagick implements imageInterface function write($destination_filepath) { + $this->add_command('interlace', 'line'); // progressive rendering + $exec = $this->imagickdir.'convert'; $exec .= ' "'.realpath($this->source_filepath).'"'; @@ -611,7 +618,11 @@ class image_ext_imagick implements imageInterface $exec .= ' "'.realpath($dest['dirname']).'/'.$dest['basename'].'"'; @exec($exec, $returnarray); - //echo($exec); + ilog($exec); + if (is_array($returnarray) && (count($returnarray)>0) ) + { + ilog($returnarray); + } return is_array($returnarray); } } diff --git a/admin/themes/default/template/configuration.tpl b/admin/themes/default/template/configuration.tpl index bdd7a7a28..3c87f1186 100644 --- a/admin/themes/default/template/configuration.tpl +++ b/admin/themes/default/template/configuration.tpl @@ -431,6 +431,14 @@ jQuery(document).ready(function(){ {/if} + + {'Sharpen'|@translate} + + + % + {if isset($ferrors.$type.sharpen)}!{/if} + + {* #sizeEdit *} diff --git a/i.php b/i.php index 6e21fa0d1..1de7dbf6e 100644 --- a/i.php +++ b/i.php @@ -582,7 +582,7 @@ if ($d_size[0]*$d_size[1] < 256000) $image->strip(); } -$image->set_compression_quality( $params->quality ); +$image->set_compression_quality( ImageStdParams::$quality ); $image->write( $page['derivative_path'] ); $image->destroy(); $timing['save'] = time_step($step); diff --git a/include/derivative_params.inc.php b/include/derivative_params.inc.php index dc375da2c..3128e5fb2 100644 --- a/include/derivative_params.inc.php +++ b/include/derivative_params.inc.php @@ -240,7 +240,6 @@ final class DerivativeParams public $use_watermark = false; public $sizing; public $sharpen = 0; - public $quality = 95; function __construct($sizing) { @@ -249,7 +248,7 @@ final class DerivativeParams public function __sleep() { - return array('last_mod_time', 'sizing', 'sharpen', 'quality'); + return array('last_mod_time', 'sizing', 'sharpen'); } function add_url_tokens(&$tokens) diff --git a/include/derivative_std_params.inc.php b/include/derivative_std_params.inc.php index 45c45c2c6..e12c1eaaa 100644 --- a/include/derivative_std_params.inc.php +++ b/include/derivative_std_params.inc.php @@ -51,6 +51,7 @@ final class ImageStdParams private static $undefined_type_map = array(); private static $watermark; public static $custom = array(); + public static $quality=95; static function get_all_types() { @@ -109,11 +110,13 @@ final class ImageStdParams if (!self::$watermark) self::$watermark = new WatermarkParams(); self::$custom = @$arr['c']; if (!self::$custom) self::$custom = array(); + if (isset($arr['q'])) self::$quality = $arr['q']; } else { self::$watermark = new WatermarkParams(); self::$type_map = self::get_default_sizes(); + self::save(); } self::build_maps(); } @@ -136,6 +139,7 @@ final class ImageStdParams $ser = serialize( array( 'd' => self::$type_map, + 'q' => self::$quality, 'w' => self::$watermark, 'c' => self::$custom, ) ); diff --git a/language/en_UK/admin.lang.php b/language/en_UK/admin.lang.php index bdfc6fa61..f0a16e498 100644 --- a/language/en_UK/admin.lang.php +++ b/language/en_UK/admin.lang.php @@ -917,4 +917,5 @@ $lang['%d minute'] = '%d minute'; $lang['%d minutes'] = '%d minutes'; $lang['%d second'] = '%d second'; $lang['%d seconds'] = '%d seconds'; +$lang['Sharpen'] = 'Sharpen'; ?> \ No newline at end of file -- cgit v1.2.3