Просмотр полной версии : Как сжать на сервере и вывести image средствами Php?
PEPSICOLA
17.01.2007, 01:57
Вообщем сабж :) Допустим у меня на сайт есть картинки разного разрешения, в формате Jpg. Это на случай если кто нажмёт "download original file", а как для preview хотелось бы что бы все картинки одинаково выводились размером 600x440 А ещё лучше сжимались в ширине до 600 пропорционально высоте, как уж выйдет.
Помню что должна быть какая то поддержка со стороны сервера. Но вообщем, как это назвать и где бы поискать? Саму процедуру обработки image'ов =)
Большое спасибо!
nc.STRIEM
17.01.2007, 02:00
вобще рекомендую сделать отдельную папку с уже готовыми превюшками, так как их сжатие будет занимать не мало времени!
а вот собсна и функция для сжатия:
/************************************************** *********************************
Функция img_resize("имя исходного файла", " имя генерируемого файла", " ширина ", "высота" ," качество генерируемого JPEG, по умолчанию - максимальное ","цвет фона, по умолчанию - белый")
************************************************** *********************************/
function img_resize($src, $dest, $width, $height, $quality=100, $rgb=0xFFFFFF)
{
if (!file_exists($src)) return false;
$size = getimagesize($src);
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);
$isrc = $icfunc($src);
$idest = imagecreatetruecolor($new_width, $new_height);
imagefill($idest, 0, 0, $rgb);
imagecopyresampled($idest, $isrc, 0, 0, 0, 0, $new_width, $new_height, $size[0], $size[1]);
for($i=strlen($dest)-1;$i>=0;$i--)
if($dest[$i]=='.')
break;
$i++;
$ftypeg="";
while($i<strlen($dest))
{
$ftypeg.=$dest[$i];
$i++;
}
if(strtolower($ftypeg)=="jpg")
$ftypeg="jpeg";
$ftypeg="image".$ftypeg;
if (!function_exists($ftypeg)) return false;
$ftypeg($idest, $dest, $quality);
imagedestroy($isrc);
imagedestroy($idest);
return true;
}
в данном случае, результат свое работы она сохраняет на диске, можно сделать чтоб сразу вывадило, но не рекомендую!
PEPSICOLA
17.01.2007, 02:29
Большое спасибо, на счёт маленьких превьюшек 100 на 100 это уже отдельно сделано, а вот захотят ли посмотреть на саму работу, это ещё по линку перейти надо. Поэтому происходить будет выборочно...
Интересно сколько примерно ресурсов компьютера будет требовать одно такое обращение? И сколько времени сам скрипт будет занимать... Уж действительно может лучше отдельно залить, а то при n'ом количестве посещений и запросов нагрузка будет чрезвычайна последствиями :) Так и сервак можно убить если захотеть :)
nc.STRIEM
17.01.2007, 02:54
кодирование одной картинке займет около ~2 секунд
я так пологая у тя тм будет галерея.....
короч лучше сделай 3 папки, одно с превюхами дето 100Х100, вторая для просмотра гдет 640Х480 а третья с фотками для скачки там уже от 1024Х768 и выше....
PEPSICOLA
17.01.2007, 04:59
А можно ли сделать такую вещь:
<body>
<img name="" src="" width="600" height="440" alt="">
</body>
Но с условием что при указании scr картинка просто складывалась относительно пропорциям...
То есть не теряя форму, не растягивалась только в ширину или только в длинну...
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot