Изменение размера анимированного GIF с помощью GraphicsMagick - PullRequest
3 голосов
/ 23 мая 2011

У меня есть анимированное gif изображение с прозрачными рамками. Мне нужно изменить его размер.

Перед изменением размера я использую функцию Magick::coalesceImages, после изменения размера изображения я использую функцию Magick::writeImages, чтобы собрать все кадры gif обратно в одно изображение.

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

Я читал об оптимизации фреймов на www.imagemagick.org плюс я могу видеть на www.graphicsmagick.org функцию gifDisposeMethod.

У меня вопрос: как заставить анимированное gif изображение с измененным размером использовать рамки прозрачности и избежать увеличения размера KBytes изображения?

1 Ответ

3 голосов
/ 24 мая 2011

Ну, я нашел способ:

При изменении размера анимированного gif использование Magick::coalesceImages() не лучший способ ...

Вместо этого я изменяю размеры в соответствии сразмер в процентах, а не абсолютный, при этом пропуская вызов Magick::coalesceImages().

Например, допустим, мой исходный анимированный gif имеет размер 300x300, и я хочу изменить его размер до 150x150, я сделаю следующее:

  • Считайте изображение в Magick::Blob
  • Рассчитайте процентные числа (50% x50% в моем демонстрационном случае)
  • Измените размер каждого кадраизображение в соответствии с процентными вычислениями.

Таким образом, мы не увеличиваем размер каждого кадра, потому что мы не используем функцию Magick::coalesceImages(), и мы изменяем размеры каждого кадра в соответствии с его исходным размером, поэтому мыне возникает проблем с прозрачностью кадра.

...