Замораживание GIF-изображений

#php #javascript #html #gif

#php #javascript #HTML #gif

Вопрос:

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

В настоящее время фоном являются фоны ячеек таблицы, подобные этому:

 <td background="animated_background_1.gif">
  

и

 <td style="background-image:url('animated_background_2.gif');"> 
  

Комментарии:

1. Я не думаю, что это можно сделать в CSS / JS. Лучшее, что вы можете сделать, это извлечь первый кадр в PHP (и кэшировать его), а затем использовать его так, как вы сейчас используете свой gif. Таким образом, вы решите свою проблему, а также уменьшите потребление полосы пропускания, поскольку один кадр gif должен быть намного меньше, чем весь анимированный GIF-файл.

2. Все, о чем я могу думать, это о том, что вы создаете статическое изображение, gif когда загружаете анимированное, и с помощью javascript заменяете два изображения в нужном событии

3. Я помню, что в те времена, когда поддержка анимированных GIF была новой функцией в браузерах, вы могли остановить анимацию, нажав кнопку «Стоп», когда страница уже была загружена. Я сомневаюсь, что браузеры все еще делают это, и, конечно, в JS / CSS / HTML, о которых я знаю, нет способа предотвратить анимацию GIF, кроме как не использовать анимированные GIF-файлы в первую очередь. Как правило, вам следует избегать анимированных GIF-файлов, за исключением случаев, когда анимация действительно необходима. В противном случае вы просто тратите впустую пропускную способность.

4. @GordonM, в FF3.5 кнопка «Стоп» отключена для загруженных страниц, но вы можете нажать клавишу Esc, чтобы остановить gif-анимацию. Хотя, это то, что может сделать конечный пользователь (а не программист), и есть крошечный шанс остановить все анимации на первом кадре 😉

5. Обновление предыдущего комментария: в FF 3.6 есть эта функция. Не знаю о 3.5, так как у меня он не установлен.

Ответ №1:

HTML, используемый для отображения изображения (или в качестве фонового изображения или чего-либо еще):

 <img src="giftopng.php?image=mypic.gif" alt="" />
  

Вызванный тестовый скрипт: «giftopng.php «

 <?php

//Get image name from URL
$image=$_GET['image'];

//Load the image
$img = ImageCreateFromGif($image);

//Convert to PNG and send it to browser
if($img) {
header("Content-Type: image/png");
ImagePNG($img);

//Clean-up memory
ImageDestroy($img);
}
?>
  

Вы могли бы использовать что-то вроде этого (исходный код http://php.net/manual/en/function.imagecreatefromgif.php).

Если нагрузка слишком высока, вы могли бы кэшировать статическое изображение.

Ответ №2:

Взгляните на http://slbkbs.org/jsgif код, это могло бы помочь вам с этой проблемой.

jsgif — это анимированный букмарклет для проигрывания GIF-файлов с поддержкой паузы, покадрового просмотра, воспроизведения в обратном порядке и других функций, которые можно ожидать от видеоплеера.