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

Форум PHP

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

 

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

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

тема: Создание gif-анимации средставми ImageMagick
 
 автор: Dr Lines   (17.05.2009 в 04:54)   письмо автору
 
 

Поскольку библиотека GD не способна создавать анимированные gif-изображения, решил поставить ImageMagick и испробовать это дело. Установил программное обеспечение с оф. сайта (http://www.imagemagick.org/script/binary-releases.php) и на php установил модуль extension - php_imagick.dll (модуль pecl , взятый из сборки pecl5.2-win32-200808060430).
Теперь у меня доступны новые классы для обработки и создания изображений: Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator.
Кое-что о них нашел тут http://ru.php.net/manual/ru/book.imagick.php но многие из функций не описаны конкретно. Не то что многие, почти все! Поэтому, найти решение, как создать анимированное gif-изображение посредствам этих классов так и не удалось.

Если у кого уже есть опыт в этом деле, поделитесь пожалуйста.

Также нашел сайт с примерами использования: http://valokuva.org/?cat=1. Возможности впечатляют.

  Ответить  
 
 автор: Dr Lines   (17.05.2009 в 05:37)   письмо автору
 
   для: Dr Lines   (17.05.2009 в 04:54)
 

Кажется нашел )
сейчас буду пробоавть
http://valokuva.org/index.php?s=gif&submit=Go

  Ответить  
 
 автор: Dr Lines   (17.05.2009 в 08:37)   письмо автору
 
   для: Dr Lines   (17.05.2009 в 05:37)
 

Вот сделал готовое решение по реайзу gif анимации


<?

$animation 
= new Imagick(); //Этот объект будет содержать анимацию

$animation->setFormat("gif"); //Задание формата для изображений gif

$im = new Imagick('23.gif'); //анимированное изображение, risize кодорого будем осуществлять

$count_im $im->getNumberImages(); //Получаем количество кадров  в исходной анимации (23.gif)
$delay_im $im->getImageDelay(); //Получаем задержку кадров в исходной анимации
$width_im $im->getImageWidth(); //Получаем высоту
$height_im $im->getImageHeight(); //Получаем ширину
$background_im $im->getImageBackgroundColor(); //Получаем цвет фона исходного изображения

for($i=0$i<$count_im$i++ )
{
    
$im->previousImage();   //Отматываем кадры на начало. Наверно есть способ попроще %)
}
for(
$i=0$i<$count_im$i++ )  
{
    
$animation->newImage$width_im$height_im$background_im);  //Создаем новый кадр
    
$animation->compositeImage($imimagick::COMPOSITE_DEFAULT00); //Накладываем кадр из исходного изображения в новый кадр
    //imagick::COMPOSITE_DEFAULT - это способ наложения. Остальные способы перечислены тут http://ru.php.net/manual/ru/imagick.constants.php#imagick.constants.compositeop
    
    
$animation->thumbnailImage(2000); //Выполняется resize до 200 пикселей поширине и сколько получится по высоте (с соблюдением пропорций конечно)
    
$animation->setImageDelay($delay_im); //Установка задержки кадра.

    
$im->nextImage(); //Переход на следующий кадр.
}

header"Content-Type: image/gif" );
echo 
$animation->getImagesBlob(); //Вывод изображения... если надо сохранить, то вызывается функция writeImage.

?>

  Ответить  
 
 автор: sim5   (17.05.2009 в 10:41)   письмо автору
1.9 Кб
 
   для: Dr Lines   (17.05.2009 в 08:37)
 

Вот еще простой класс создания GIF-анимации

  Ответить  
 
 автор: it_is_good   (31.12.2009 в 17:04)   письмо автору
17.3 Кб
 
   для: Dr Lines   (17.05.2009 в 08:37)
 

Ваше решение не совсем корректно.
Вот Ваше решение, немножко переделанное, но его нужно немножко доделать


<?

$animation 
= new Imagick(); //Этот объект будет содержать анимацию
$anim1 = new Imagick(); //Этот объект будет содержать первый кадр

$animation->setFormat("gif"); //Задание формата для изображений gif

$im = new Imagick('23.gif'); //анимированное изображение, resize которого будем осуществлять

foreach ($im as $animation)
{
  
$animation->thumbnailImage(2000); //Выполняется resize до 200 пикселей поширине и сколько получится по высоте (с соблюдением пропорций конечно)
  
$animation->setImagePage$animation->getImageWidth(), $animation->getImageHeight(), 0);
}

header"Content-Type: image/gif" );
echo 
$animation->getImagesBlob(); //Вывод изображения... если надо сохранить, то вызывается функция writeImage.
?>


Этот скрипт работает почти со всеми видами .gif анимации, кроме прикрепленного сюда рисунка.

Или на хостинге картинок

Кто может помочь с этой проблемой???

  Ответить  
 
 автор: it_is_good   (02.01.2010 в 10:59)   письмо автору
 
   для: it_is_good   (31.12.2009 в 17:04)
 

Вроде нашел, вот эта функция coalesceImages(), но как ее использовать??? Весь инет перелопатил, но так и не нашел примера ее использования...

  Ответить  
 
 автор: adscom   (09.08.2010 в 00:10)   письмо автору
 
   для: it_is_good   (31.12.2009 в 17:04)
 

DELETE

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

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