Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обработка изображений
 
 автор: GAV   (22.06.2007 в 15:22)   письмо автору
 
 

Есть необходимость предоствить пользователям загружать фотографии на сайт (своего рода мини фотоальбомчик). И конечно же фотографии бывают разного размера. А как хочется чтобы выдовались маленькие картиночки для предварительного просмотра и большие если пользователь захочет посмотреть поближе. Можно конечно это решить предоствив пользователю два поля для загрузки, мальньких и больших изображений. Но это требует от пользователя лишних усилий и определенных навыков работы с изображениями. Можно просто взять и задать в теге <img> параметры размера изображения и тогда большое изображение сожмется, но это тоже не годится, т.к. большие изображения могут весить не 1Мб и не 2Мб, тяжеловато выйдет если на странице вывести 9 фотографий по 2Мб. Тогда в голову приходит третий способ, а можно ли при загрузке одной фотографии делать ее аналог, но меньшего размера и выдавать за маленькое изображение? Ну например как-то установить большую сторону изображения, допустим равной 100рх с пропорциональным уменьшением другой стороны. Может кто из специалистов знает как это сделать. Или предложит еще какой способ(хотя меня больше интересует именно этот =) )?

   
 
 автор: kasmanaft   (22.06.2007 в 15:35)   письмо автору
 
   для: GAV   (22.06.2007 в 15:22)
 

Вот http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=145
Попробуйте также поиск по "уменьш картинк" ... только логику на "и" поменяйте...

   
 
 автор: Петр   (01.08.2007 в 06:36)   письмо автору
 
   для: GAV   (22.06.2007 в 15:22)
 


<?
// Загрузка файла на сервер;
...

// $src - имя файла;
// $width - новый размер изображения;

// Цвет фона;
$rgb=0xFFFFFF;
// Качество изображения;
$quality=100;
if (!
file_exists($src)) return false;
$size = getimagesize($src);
if (
$size === false) return false;
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!
function_exists($icfunc)) return false;
(int)
$height = $size[1] * $width / $size[0];
$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($src);
$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]);
$white = ImageColorAllocate($idest, 255, 255, 255);
// Перезапись файла;
$fh=fopen($src,'w');
fclose($fh);
imagejpeg($idest, $src, $quality);
imagedestroy($isrc);
imagedestroy($idest);
return 
true;
?>

Если надо не переписывать файл, а создать другой (уменьшенную копию), то нужно изменить строку $fh=fopen($src,'w'); на $fh=fopen($src.'_min','w');

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования