Driver86 | Дата: Среда, 2012-03-14, 02:00:32 | Сообщение # 1 |
CyberMan
Сообщений: 545
Репутация: 14
Не на форуме
| Скрипт принимает значения, указывающие высоту и ширину картинки, и выводит готовое изображение на скачивание в соответствие с ними. Полезно будет для сайтов с обоями на рабочий стол, когда пользователь сам выбирает, в каком разрешении ему нужна картинка, причём, на сервере картинка храниться только в одном экземпляре, экономя дисковое пространство на хостинге. И никакого фотошопа, только автоматика.
Создаём файл с именем, к примеру, iresize.php и загружаем его в папку /scripts (или любую другую папку, созданную внутри этой). Затем вставляем в него следующий код:
Code <?php
$___notjson = 1;
function iresize( $source, $newwidth, $newheight, $quality = 80 ) {
$ch = curl_init(); curl_setopt_array($ch, array(CURLOPT_URL => $source, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_CONNECTTIMEOUT => 5, CURLOPT_TIMEOUT => 5, CURLOPT_USERAGENT => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)") );
$src = imagecreatefromstring(curl_exec($ch));
curl_close($ch);
$oldwidth = imagesx($src); $oldheight = imagesy($src);
$w = $newwidth; $h = intval( round($newwidth * $oldheight / $oldwidth) ); $x = 0; $y = intval( round(($h-$newheight)/2) );
if($h<$newheight){ $h = $newheight; $w = intval( round($newheight * $oldwidth / $oldheight) ); $x = intval( round(($w-$newwidth)/2) ); $y = 0; }
$destination = imagecreatetruecolor($newwidth, $newheight); imagecopyresampled($destination, $src, 0, 0, $x, $y, $w, $h, $oldwidth, $oldheight);
header('Content-Type: image/jpeg'); header('Content-Disposition: attachment; filename='.rand(111111,999999).'.jpg');
//imageinterlace($destination, 1); imagejpeg($destination, '', $quality);
imagedestroy($destination); imagedestroy($src);
}
iresize( $_GET['src'], $_GET['w'], $_GET['h'] );
?>
Итак, что делает этот скрипт:- Для изменения размеров изображения я предпочёл использовать imagecopyresampled, т.к. она более, чем хорошо подходит для таких действий (уменьшения изображения).
- Скрипт плавно интерполирует изображение с сохранением пропорций. Лишние части изображения, если они не вписываются в рамки после изменения размеров, вырезаются.
- Если требуется просматривать изображение в браузере, а не скачивать его, то удалите из кода эту строчку
Code header('Content-Disposition: attachment; filename='.rand(111111,999999).'.jpg');
- Используйте скрипт для получения только уменьшенных копий картинки. В любом случае, при увеличении картинки качество ухудшается. Поэтому, целесообразно (для сайтов с красивыми обоями рабочего стола) заранее иметь максимальный оригинал.
|
|
| |