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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Уменьшить изображение

Сообщения:  [1-10] 

 
 автор: FiX   (29.11.2006 в 10:36)   письмо автору
 
   для: FiX   (28.11.2006 в 11:43)
 

Ну пожалуйста, хоть кто нибудь...
Пробовал заливать изображение функцией imagefill() до и после функции imagecopyresampled, ничего не меняется. Вообще не понимаю, в чем тут может быть дело?

   
 
 автор: FiX   (28.11.2006 в 11:43)   письмо автору
 
   для: Trianon   (28.11.2006 в 09:20)
 

 
<?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] - высота исходного изображения

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

    
imagefill($dest_img,0,0,0x999999);

    
// в зависимости от типа файла выбирвем функцию сохранения в файл
    
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);
}
?>


Заливает он нормально, но вот с функцией imagecopyresampled проблема...
Она уже сама обавляет рисунок с черным краем справа... До сих пор не могу разобраться. Помогите, пожалуйста ;)

   
 
 автор: Trianon   (28.11.2006 в 09:20)   письмо автору
 
   для: FiX   (28.11.2006 в 08:40)
 

Залейте сперва весь кадр чем угодно.
А потом копируйте в нужное место картинку.

   
 
 автор: FiX   (28.11.2006 в 08:40)   письмо автору
 
   для: Trianon   (27.11.2006 в 17:01)
 

Большое спасибо!
Написал 43, такая же ситуация... Потом дошло - левая половина просто закрашивается в белый цвет! Поэтому я и думал, что не получается... Спасибо еще раз.
И последний вопрос. Можно изменить цвет заливки правой стороны? Например, на серый?

   
 
 автор: Trianon   (27.11.2006 в 17:01)   письмо автору
 
   для: FiX   (27.11.2006 в 15:53)
 

Кадр у Вас шириной 150.(высотой 100)
А изображение после перемасштабирования шириной = 100*600/941 = 64
Разница = 150-64=86
Половина разницы = 43

   
 
 автор: FiX   (27.11.2006 в 15:53)   письмо автору
2.5 Кб
 
   для: Trianon   (27.11.2006 в 14:29)
 

Я и так пробовал в тот раз.
Прикрепил файл, вот такой результат работы скрипта.
Размеры исходного изображения - 600*941 (ширина-высота),
размеры маленького - 150*100

> укажите половину разности ширины кадра и изображения
Это как? :)
В смысле, (600-150) / 2 ?
Получилось 225,
меняю строку
imagecopyresampled($dest_img, $src_img, 225, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
изображения совсем нет...

   
 
 автор: Trianon   (27.11.2006 в 14:29)   письмо автору
 
   для: FiX   (27.11.2006 в 14:09)
 

>...И есть скрипт, который уменьшает размер фотографии с черными полями, но добавляет их справа.
>Как же сделать картинку посередине?..
Вот возьмите его, и вместо нуля в третьем параметре imagecopyresampled() укажите половину разности ширины кадра и изображения. Черное поле будет разбито пополам.

   
 
 автор: FiX   (27.11.2006 в 14:09)   письмо автору
 
   для: Саня   (24.11.2006 в 19:23)
 

Ну извините, но я снова прочитал все, и не нашел ответ на свой вопрос. Возможно, что-то я пропустил?
Безусловно, там есть ответ на то, как уменьшить фотографию без черных полей. И есть скрипт, который уменьшает размер фотографии с черными полями, но добавляет их справа.
Как же сделать картинку посередине?..

   
 
 автор: Саня   (24.11.2006 в 19:23)   письмо автору
 
   для: Fix   (24.11.2006 в 15:04)
 

Если бы вы не поленились и прочитали хотя бы первые 10 постов той темы, то вы нашли бы ответ на свой вопрос.

   
 
 автор: Fix   (24.11.2006 в 15:04)   письмо автору
 
 

Это своеобразное продолжение темы
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=145

Там есть скрипт, который уменьшает фотографию и добавляет черные поля скраю, если фотка вертикальная.
Так вот мне надо, чтобы фотка была не слева, а в середине.
И еще: можно ли изменить цвет заливки? А то искал, даже намека на цвет не было...

   

Сообщения:  [1-10] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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