Предлагаю свой вариант модернизированной функции create_tmb() для создания превью фотографий фотоальбома.
Основные отличия возможностей данной версии функции от старой:
1. превью фотография масштабируется точно в размерах рамки для превью в форуме при просмотре,при этом свободное место на превью
заливается выбранным вами цветом.
2. В результате правильного масштабирования удаляется глюк когда создавался кусочек превью
исходной фотографии а не целая превью фотографий из большой фотографии.
3. Добавлена возможность изменять цвет подложки под превью фотографией при ее создании.
4. При создании превью не страдает цветовая гамма превью фотографий.
В файле \modules\photogallery\functions.php заменить старую функцию на новую:
PHP:
function create_tmb($bigimgsrc,$trumbalis) {
// цвет подложки под фотографией
$rgb=0xF0F5FA;
// качество фотографии: 0 - самое низкое, 100 - самое высокое
$quality=100;
// ширина превью с подложкой
$width = 148;
// высота превью с подложкой
$height=118;
// определяем размер исходной картинки
$size = getimagesize($bigimgsrc);
// если это битая картинка
if ($size === false) return false;
// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)) return false;
// подсчитываем коэффициенты уменьшения по ширене и высоте
$x_ratio = $width / $size[0];
$y_ratio = $height / $size[1];
$ratio = min($x_ratio, $y_ratio);
$use_x_ratio = ($x_ratio == $ratio);
// расчитываем новые размеры превьюшки
$new_width = $use_x_ratio ? $width : floor($size[0] * $ratio);
$new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);
$new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
$new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
$isrc = $icfunc($bigimgsrc);
$idest = imagecreatetruecolor($width, $height);
imagefill($idest, 0, 0, $rgb);
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0,
$new_width, $new_height, $size[0], $size[1]);
// создаем превью
imagejpeg($idest, $trumbalis, $quality);
// удаляем все из памяти
imagedestroy($isrc);
imagedestroy($idest);
return true;
}
|