Показать сообщение отдельно

Скрипт изменяет размер изображения
  #417  
Старый 21.08.2008, 10:26
Dr1ver
Участник форума
Регистрация: 20.08.2008
Сообщений: 137
Провел на форуме:
2607957

Репутация: 184
По умолчанию Скрипт изменяет размер изображения

PHP код:

<?php
$w
=160//новая ширина 
$h=120//новая высота 
$i='1.jpg';
$i='images/'.$i//путь к изображению

 
$left=0//задаём смещение слева
 
$top=0//задаём смещение сверху
  
  
$size getimagesize($i); // получаем информацию о исходном изображении
  
   
  
$sw=$size['0']; //исходная ширина  
  
$sh=$size['1'];  //исходная высота 
  
$k1=$sw/$w;  //коэффициент отношения ширины   
  
$k2=$sh/$h;  //коэффициент отношения высоты   
  
$e=$w/$h//коэффициент отношения новой ширины и высоты   
  
$se=$sw/$sh//коэффициент отношения исходной ширины и высоты  
  
$m=$se/$e//поправочный коэффициент 


  
if($w>=$h)
  {
  
$sh=$h*$k1
  
  if(
$e<$se)   
  {
  
$sw=$sw/$m
  
$sh=$sh/$m
  
$left=($size['0']-$sw)/2;
  }
  
$top=($size['1']-$sh)/2;
  }
  
  else
  {
  
$sw=$w*$k2;
 
  if(
$e>$se)   
  {
  
$sw=$sw*$m
  
$sh=$sh*$m
  
$top=($size['1']-$sh)/2;
  }  
  
$left=($size['0']-$sw)/2;
  }
 
  
  
$image imagecreatetruecolor($w,$h); //создаём пустое новое изображение
  
$s imagecreatefromjpeg($i); //считываем изображение из jpeg файла
  
imagecopyresampled ($image$s00$left$top$w$h$sw$sh); //изменяем размер изображения

  
header("Content-type: image/png");
  
imagepng($image);//выводим новое изображение в формате png

  
imagedestroy($image); //освобождаем память
  
imagedestroy($s); //освобождаем память

?>

Делал как-то галерею, нужно было как-то привести все изображения к одному размеру.

Преимущество этого скрипта в том, что он учитывает пропорцию исходного изображения. Картинки не искажаются при любых исходных и конечных размерах и размер изображения в итоге получается строго в заданных $w и $h. Кому не лень, поэксперементируйте. Все скрипты аналоги в нете, которые я нашёл работают немного подругому, не приводя размер изображения к заданному, игнорируя либо ширину либо высоту.

Пользуйтесь
 
Ответить с цитированием