|
|
|
| Вот здесь 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);
|
| |
|
|
|
|
|
|
|
для: Владимир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);
|
| |
|
|
|
|
|
|
|
для: elenaki
(22.01.2015 в 21:35)
| | Лена, спасибо, но тут нюанс не в том, что у файлов разное расширение, для которого нужны разные функции, а в том, что конретно для gif не работает. | |
|
|
|
|
|
|
|
для: Владимир55
(22.01.2015 в 21:04)
| | на самом деле лучше GD не использовать. качество изображения достаточно плохое на выходе и жрет много ресурсов. используйте класс Imagick, он крутой, много чего умеет из коробки и даже на самых захудалых хостингах он есть, насколько мне известно. примеры ресайза вот тут:
http://php.net/manual/ru/imagick.resizeimage.php | |
|
|
|
|
|
|
|
для: Владимир55
(22.01.2015 в 21:04)
| |
$filename = imagecreatefromgif("21.gif");
$image = imagecreatefromgif($filename);
|
Уверены что это нормально, 2 раза? | |
|
|
|
|
|
|
|
для: KPETuH
(23.01.2015 в 14:45)
| | Не уверен. Вообще ни в чем не уверен - с этой библиотекой GD встретился впервые.
А как надо? | |
|
|
|
|
|
|
|
для: Владимир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);
|
| |
|
|
|
|
|
|
|
для: Владимир55
(22.01.2015 в 21:04)
| | GIF формат, это индексированная палитра, и как уменьшать такое изображение сильно зависит от количества цветов этой палитры, если их немного, то imagecopyresampled, это неоправданная операция. Если же все таки используется полноцветное преобразование, а на выходе нужна индексированная палитра с малым числом цветов, то для уменьшения размера файла приводите полноцветное изображение к индексированному перед его записью. | |
|
|
|