• Страница 1 из 1
  • 1
Обои на рабочий стол разных размеров
Driver86Дата: Среда, 2012-03-14, 02:00:32 | Сообщение # 1
Нет аватара у Driver86
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');


  • Используйте скрипт для получения только уменьшенных копий картинки. В любом случае, при увеличении картинки качество ухудшается. Поэтому, целесообразно (для сайтов с красивыми обоями рабочего стола) заранее иметь максимальный оригинал.



 
  • Страница 1 из 1
  • 1
Поиск: