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

Форум PHP

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

 

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

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

тема: Про функцию imagecopyresampled()
 
 автор: Fix   (07.12.2006 в 15:41)   письмо автору
 
 

Как она работает?
С помощью этой функции вписывается уменьшенная копия изображения (посередине). Левую сторону закрасить удается, а вот правая сторона закрашивается только черным цветом - зачем? Можно ли изменить цвет заливки?

   
 
 автор: Fli   (07.12.2006 в 16:11)   письмо автору
 
   для: Fix   (07.12.2006 в 15:41)
 

Выложите код!

   
 
 автор: Fix   (07.12.2006 в 16:34)   письмо автору
92.4 Кб
 
   для: Fli   (07.12.2006 в 16:11)
 


<?php
function resizeimg($filename$w$h)
{
    
// определим коэффициент сжатия изображения, которое будем генерить
    
$ratio $w/$h;
    
// создадим пустое изображение по заданным размерам
    
$dest_img imagecreatetruecolor($w$h);
    
// зальём его белым цветом
    
imagefill($dest_img000xEEEEEE);
    
// получим размеры исходного изображения
    
$size_img getimagesize($filename);
    
// получим коэффициент сжатия исходного изображения
    
$src_ratio=$size_img[0]/$size_img[1];

    
// здесь вычисляем размеры, чтобы при масштабировании сохранились
    // 1. Пропорции исходного изображения
    // 2. Исходное изображение полностью помещалось на маленькой копии
    // (не обрезалось)
    
if ($src_ratio>$ratio)
    {
        
$old_h=$size_img[1];
        
$size_img[1]=floor($size_img[0]/$ratio);
        
$old_h=floor($old_h*$h/$size_img[1]);
    }
    else
    {
        
$old_w=$size_img[0];
        
$size_img[0]=floor($size_img[1]*$ratio);
        
$old_w=floor($old_w*$w/$size_img[0]);
    }

    
// исходя из того какой тип имеет изображение
    // выбираем функцию создания
    
switch ($size_img['mime'])
    {
        
// если тип файла JPEG
        
case 'image/jpeg':
            
// создаем jpeg из файла
            
$src_img imagecreatefromjpeg($filename);
            
$ext="jpg";
            break;
        
// если тип файла GIF
        
case 'image/gif':
            
// создаем gif из файла
            
$src_img imagecreatefromgif($filename);
            
$ext="gif";
            break;
    }

    
// масштабируем изображение    функцией imagecopyresampled()
    // $dest_img - уменьшенная копия
    // $src_img - исходной изображение
    // $w - ширина уменьшенной копии
    // $h - высота уменьшенной копии
    // $size_img[0] - ширина исходного изображения
    // $size_img[1] - высота исходного изображения
// третья цифра - 43 - помогает "вписать" картинку в середину прямоугольника

    
imagecopyresampled($dest_img$src_img43000$w$h$size_img[0], $size_img[1]);

    
// в зависимости от типа файла выбирвем функцию сохранения в файл
    
switch ($size_img['mime'])
    {
        case 
'image/jpeg':
            
// сохраняем в файл small.jpg
            
imagejpeg($dest_img"small.$ext");
            break;
        case 
'image/gif':
            
// сохраняем в файл small.gif
            
imagegif($dest_img"small.$ext");
            break;
    }

    
// чистим память от созданных изображений
    
imagedestroy($dest_img);
    
imagedestroy($src_img);
}

    
$source="test.jpg";

    
// вызываем функцию изменения размера
    
resizeimg($source150100);
    
// выводим картинку на экран
    
?>
    <img src="small.jpg">

вот и фсе... Мне нужно залить края изображения серым цветом... Левый край - получается, а правый - нет. Прикрепил фотку для тестирования.

   
 
 автор: FiX   (08.12.2006 в 10:43)   письмо автору
 
   для: Fix   (07.12.2006 в 16:34)
 

Ну хоть кто-нибудь же знает :( Ну ответьте, пожалуйста. Очень надо. Начальник требует :((

   
 
 автор: Fli   (08.12.2006 в 22:32)   письмо автору
 
   для: FiX   (08.12.2006 в 10:43)
 

Так пойдет?



<?PHP

       
function img_resize($src$dest$width$height$rgb 0xEEEEEE$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;
                                  
$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  floor(($width $new_width) / 2);
                                  
$new_top     = !$use_x_ratio floor(($height $new_height) / 2);
                                  
$isrc        $icfunc($src);
                                  
$idest       imagecreatetruecolor($width$height);
                                  
                                  
imagefill          ($idest00$rgb                         );
                                  
imagecopyresampled ($idest$isrc$new_left$new_top00,
                                                      
$new_width$new_height$size[0], $size[1]);
                                  
imagejpeg          ($idest$dest$quality                    );
                                  
imagedestroy       ($isrc                                      );
                                  
imagedestroy ($idest                                           );
                                                return 
true;

                   }

                   
img_resize('kartinla.jpg''sempl.jpg'200150);

?>

   
 
 автор: Fix   (11.12.2006 в 10:06)   письмо автору
 
   для: Fli   (08.12.2006 в 22:32)
 

Все просто супер!!!
Спасибо, Fli, все работает идеально!!!

Сколько счастья привалило :) На душе легче стало. Еще раз спасибо!

   
Rambler's Top100
вверх

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