2013-11-13 4 views
1

У меня есть сценарий, который изменяет размер загруженных изображений. Он отлично работает для PNG и JPG, но не для GIF. Для GIF-файлов предполагается преобразовать их в JPG, а затем изменить их размер. Преобразование работает, но тогда они не будут изменены ...Изменение размера PN для PNG и JPG, но не GIF

function resize_image($file, $maxWidth, $maxHeight) { 
    $jpgFile = substr_replace($file, 'jpeg', -3); 
    $fileType = strtolower(substr($file, -3)); 
    ... 
    if ($fileType == 'gif') { 
     $test = imagecreatefromgif($file); 
     imagejpeg($test, $jpgFile); 
     $src = imagecreatefromjpeg($jpgFile); 
     $dst = imagecreatetruecolor($newWidth, $newHeight); 
     imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); 
     imagejpeg($dst, $jpgfile); 
    } 
} 
+0

это может помочь вам: http://stackoverflow.com/a/13596913/2097224 – aldanux

ответ

0

Я не думаю, что вам нужно для вывода изображения, после того, как он создан из GIF - imagecreatefromgif считывает изображение в память, вы должны быть в состоянии для этого:

$src = imagecreatefromgif($file); 
$dst = imagecreatetruecolor($newWidth, $newHeight); 
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); 
imagejpeg($dst, $jpgfile); 
0

Какую версию библиотеки GD вы используете? По the official PHP documentation:

поддержка GIF была удалена из библиотеки GD в версии 1.6, и добавил назад в версии 2.0.28. Эта функция недоступна между этими версиями .

+0

Это версия 1.0, так что я не думаю, что это вопрос, но благодаря –

0

В итоге я обошел конвертацию GIF в JPG и напрямую изменил размер GIF. Тем не менее, для поддержания прозрачности (по умолчанию он превращает прозрачный фон в черный цвет, поэтому я сначала преобразовал его в JPG перед изменением размера), мне пришлось добавить несколько инструкций.

$src = imagecreatefromgif($file); 
    $dst = imagecreatetruecolor($newWidth, $newHeight); 
    imagecolortransparent($dst, imagecolorallocatealpha($dst, 0, 0, 0, 127)); 
    imagealphablending($dst, false); 
    imagesavealpha($dst, true); 
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); 
    imagegif($dst, $file); 
Смежные вопросы