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

Форум PHP

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

 

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

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

тема: Уменьшение размера изображения
 
 автор: Владимир55   (22.01.2015 в 21:04)   письмо автору
 
 

Вот здесь http://php.net/manual/ru/function.imagecopyresampled.php приведен пример изменения размера изображения. Я попробовал - все и у меня нормально работает.

Нюанс в том, что в примере используется графический файл в формате JPG, а нужно работать с форматом GIF.

Сделал изменения для этого формата, однако выводится значок, как если бы картинка не найдена.

В чем моя ошибка?

    // УМЕНЬШЕНИЕ МАСШТАБА ИЗОБРАЖЕНИЯ

    $filename = imagecreatefromgif("21.gif");     // Вводим изображение

    $percent = 0.5;

    header('Content-Type: image/gif');

    // получение новых размеров
    list($width, $height) = getimagesize($filename);
    $new_width = $width * $percent;
    $new_height = $height * $percent;

    // ресэмплирование
    $image_p = imagecreatetruecolor($new_width, $new_height);
    $image   = imagecreatefromgif($filename);
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

    imagegif($filename);
    imagedestroy($filename);

  Ответить  
 
 автор: elenaki   (22.01.2015 в 21:35)   письмо автору
 
   для: Владимир55   (22.01.2015 в 21:04)
 

    if ($size[2]==2) $src_img = imagecreatefromjpeg($_FILES['photos']['tmp_name']);                         
    else if ($size[2]==1) $src_img = imagecreatefromgif($_FILES['photos']['tmp_name']);                         
    else if ($size[2]==3) $src_img = imagecreatefrompng($_FILES['photos']['tmp_name']); 


В зависимости от формата изображения вызывается нужная функция.


    if     ($size[2]==2) imagejpeg($dst_img, "../../avatars/".$filename, 90);                         
    else if ($size[2]==1) imagegif($dst_img, "../../avatars/".$filename);                         
    else if ($size[2]==3) imagepng($dst_img, "../../avatars/".$filename, 90);   

  Ответить  
 
 автор: Владимир55   (22.01.2015 в 22:21)   письмо автору
 
   для: elenaki   (22.01.2015 в 21:35)
 

Лена, спасибо, но тут нюанс не в том, что у файлов разное расширение, для которого нужны разные функции, а в том, что конретно для gif не работает.

  Ответить  
 
 автор: psychomc   (23.01.2015 в 00:30)   письмо автору
 
   для: Владимир55   (22.01.2015 в 21:04)
 

на самом деле лучше GD не использовать. качество изображения достаточно плохое на выходе и жрет много ресурсов. используйте класс Imagick, он крутой, много чего умеет из коробки и даже на самых захудалых хостингах он есть, насколько мне известно. примеры ресайза вот тут:
http://php.net/manual/ru/imagick.resizeimage.php

  Ответить  
 
 автор: KPETuH   (23.01.2015 в 14:45)   письмо автору
 
   для: Владимир55   (22.01.2015 в 21:04)
 

$filename = imagecreatefromgif("21.gif");

$image   = imagecreatefromgif($filename); 

Уверены что это нормально, 2 раза?

  Ответить  
 
 автор: Владимир55   (23.01.2015 в 16:45)   письмо автору
 
   для: KPETuH   (23.01.2015 в 14:45)
 

Не уверен. Вообще ни в чем не уверен - с этой библиотекой GD встретился впервые.

А как надо?

  Ответить  
 
 автор: KPETuH   (23.01.2015 в 17:14)   письмо автору
 
   для: Владимир55   (23.01.2015 в 16:45)
 

Как-то так, работоспособность не проверял.
$filename = "21.gif"
    $percent = 0.5;
    header('Content-Type: image/gif');
    // получение новых размеров
    list($width, $height) = getimagesize($filename);
    $new_width = $width * $percent;
    $new_height = $height * $percent;
    // ресэмплирование
    $image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromgif($filename);
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

    imagegif($image_p);
    imagedestroy($image_p);
    imagedestroy($image);

  Ответить  
 
 автор: confirm   (23.01.2015 в 17:54)   письмо автору
 
   для: Владимир55   (22.01.2015 в 21:04)
 

GIF формат, это индексированная палитра, и как уменьшать такое изображение сильно зависит от количества цветов этой палитры, если их немного, то imagecopyresampled, это неоправданная операция. Если же все таки используется полноцветное преобразование, а на выходе нужна индексированная палитра с малым числом цветов, то для уменьшения размера файла приводите полноцветное изображение к индексированному перед его записью.

  Ответить  
Rambler's Top100
вверх

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