alexblade
Новичок
PHP:
<?php
function Resize($src, $width = 168, $height = 126)
{
if (!file_exists($src) or !is_int($width) or !is_int($height)) return false;
// Определяем размер изображения с помощью функции getimagesize
$size = getimagesize($src);
if ($size === false) return false;
// Определяем исходный формат по MIME-информации
$tmp = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$ifunc = "imagecreatefrom" . $tmp;
if (!function_exists($ifunc)) return false;
// Ширина должна быть больше высоты. В случае портретного оригинала, скрипт сам перевернёт превьюшку
if ($width < $height) {$tmp = $height; $height = $width; $width = $tmp;}
// $size[0] ширина оригинала
// $size[1] высота оригинала
// $newx ширина превьюшки
// $newy высота превьюшки
if ($size[1] <= $size[0]) {$newx = $width; $newy = $height;} else {$newx = $height; $newy = $width;}
if ($size[1] < $newy or $size[0] < $newx) return false;
$x_ratio = $newx / $size[0];
$y_ratio = $newy / $size[1];
$ratio = max($x_ratio, $y_ratio);
$use_x = ($ratio == $x_ratio);
// Обрезаем исходный файл согласно $ratio
$neww = $use_x ? $size[0] : floor($newx / $ratio);
$newh = !$use_x ? $size[1] : floor($newy / $ratio);
$newl = $use_x ? 0 : floor(($size[0] - $neww) / 2);
$newt = !$use_x ? 0 : floor(($size[1] - $newh) / 2);
// Читаем в память image функцию
$source = $ifunc($src);
// Создаем новое изображение
$target = imagecreatetruecolor($newx, $newy);
// Копируем существующее изображение в новое с изменением размера:
imagecopyresampled(
$target, // Идентификатор нового изображения
$source, // Идентификатор исходного изображения
0,0, // Координаты (x,y) верхнего левого угла в новом изображении
$newl,$newt, // Новые координаты (x,y) верхнего левого угла отцентрированного исходного блока
$newx, // Заданная ширина превьюшки
$newy, // Заданная высота превьюшки
$neww, // Новая ширина исходного блока согласно $ratio
$newh // Новая высота исходного блока согласно $ratio
);
// Вывод
header('Content-Type: image/jpeg');
imagejpeg($target);
// Не забываем
imagedestroy($target);
imagedestroy($source);
}
$src = 'original.jpg'; // Исходный файл
Resize($src);
?>
но кмк это более правильная и универсальная превьюшка готовая заменить ту что в факе.
эта превьюшка по принципу "скажи что, и я уменьшу" (мне как раз такая и нужна была) а не авто уменьшение всей вашей библиотеки..
подскажите если ктото видит как еще её улучшить (не путать с наворотить)