Просмотр файла wapphoto/resize.php

Размер файла: 4.4Kb
<?php 
$type=3;
// f - имя файла 
// type - способ масштабирования 
// q - качество сжатия 
// src - исходное изображение 
// dest - результирующее изображение 
// w - ширниа изображения 
// ratio - коэффициент пропорциональности 
// str - текстовая строка 

// тип преобразования, если не указаны размеры 
if ($type == 0) $w = 70;  // квадратная 70x70 
if ($type == 1) $w = 90;  // квадратная 90x90 
if ($type == 2) $w =100; // пропорциональная шириной 100 c текстом
if ($type == 3) $w =64; // пропорциональная шириной 64


// качество jpeg по умолчанию 
if (!isset($q)) $q = 70;

// создаём исходное изображение на основе 
// исходного файла и опеределяем его размеры 
$src = imagecreatefromjpeg($f); 
$w_src = imagesx($src); 
$h_src = imagesy($src);

header("Content-type: image/jpeg");

// если размер исходного изображения 
// отличается от требуемого размера 
if ($w_src != $w) 
{

// операции для получения прямоугольного файла 
   if ($type==3) 
   { 
       // вычисление пропорций 
       $ratio = $w_src/$w; 
       $w_dest = round($w_src/$ratio); 
       $h_dest = round($h_src/$ratio); 

       // создаём пустую картинку 
       // важно именно truecolor!, иначе будем иметь 8-битный результат 
       $dest = imagecreatetruecolor($w_dest,$h_dest); 
       imagecopyresized($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src); 

    } 

// операции для получения прямоугольного файла 
   if ($type==2) 
   { 
       // вычисление пропорций 
       $ratio = $w_src/$w; 
       $w_dest = round($w_src/$ratio); 
       $h_dest = round($h_src/$ratio); 

       // создаём пустую картинку 
       // важно именно truecolor!, иначе будем иметь 8-битный результат 
       $dest = imagecreatetruecolor($w_dest,$h_dest); 
       $str = "visavi.net"; 
       imagecopyresized($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src); 

// определяем координаты вывода текста 
        $size = 2; // размер шрифта 
        $x_text = $w_dest-imagefontwidth($size)*strlen($str)-3; 
        $y_text = $h_dest-imagefontheight($size)-3; 

        // определяем каким цветом на каком фоне выводить текст 
        $white = imagecolorallocate($dest, 255, 255, 255); 
        $black = imagecolorallocate($dest, 0, 0, 0); 
        $gray = imagecolorallocate($dest, 127, 127, 127); 
        if (imagecolorat($dest,$x_text,$y_text)>$gray) $color = $black; 
        if (imagecolorat($dest,$x_text,$y_text)<$gray) $color = $white; 

        // выводим текст 
        imagestring($dest, $size, $x_text-1, $y_text-1, $str,$white-$color); 
        imagestring($dest, $size, $x_text+1, $y_text+1, $str,$white-$color); 
        imagestring($dest, $size, $x_text+1, $y_text-1, $str,$white-$color); 
        imagestring($dest, $size, $x_text-1, $y_text+1, $str,$white-$color); 

        imagestring($dest, $size, $x_text-1, $y_text,   $str,$white-$color); 
        imagestring($dest, $size, $x_text+1, $y_text,   $str,$white-$color); 
        imagestring($dest, $size, $x_text,   $y_text-1, $str,$white-$color); 
        imagestring($dest, $size, $x_text,   $y_text+1, $str,$white-$color); 

        imagestring($dest, $size, $x_text,   $y_text,   $str,$color); 
    } 

 // операции для получения квадратного файла 
    if (($type==0)||($type==1)) 
    { 
         // создаём пустую квадратную картинку 
         // важно именно truecolor!, иначе будем иметь 8-битный результат 
         $dest = imagecreatetruecolor($w,$w); 

         // вырезаем квадратную серединку по x, если фото горизонтальное 
         if ($w_src>$h_src) 
         imagecopyresized($dest, $src, 0, 0,
                          round((max($w_src,$h_src)-min($w_src,$h_src))/2),
                          0, $w, $w, min($w_src,$h_src), min($w_src,$h_src)); 

         // вырезаем квадратную верхушку по y, 
         // если фото вертикальное (хотя можно тоже серединку) 
         if ($w_src<$h_src) 
         imagecopyresized($dest, $src, 0, 0, 0, 0, $w, $w,
                          min($w_src,$h_src), min($w_src,$h_src)); 

         // квадратная картинка масштабируется без вырезок 
         if ($w_src==$h_src) 
         imagecopyresized($dest, $src, 0, 0, 0, 0, $w, $w, $w_src, $w_src); 
     } 

// вывод картинки и очистка памяти 
imagejpeg($dest,'',$q); 
imagedestroy($dest); 
imagedestroy($src); 
} 

imagecopyresized($dest, $src, 0, 0, 0, 0, $w,
                 $w, min($w_src,$h_src), min($w_src,$h_src)); 
?>