LoginSignup
19
20

More than 3 years have passed since last update.

GIFアニメをCSS3のanimation-timing-functionに置き換えて容量を削ろう

Last updated at Posted at 2015-10-14

GIFアニメーションって結構サイズがでかいです。
2chまとめとかに貼ってある画像はどれも2MB以上あったりします。

正直動画にしてvideoタグで読み込むほうが小さくなるのですが、
ブラウザによって読めるファイル形式が違うし、スマホでの再生が面倒です。

これまではJSやCanvasで工夫してなんとか見せていましたが、
CSSアニメーションで楽に実装できます。

animation-timing-functionstepsを使うとstep数に応じてアニメーションが進むようになります。
stepsの数は(フレーム数 - 1

css
.flip {
  width: 240px;
  height: 240px;
  background-image: url(image.jpg);
  animation: flip 1500ms steps(43) infinite;
}

@keyframes flip {
  from {
    background-position: 0 top;
  }
  to {
    background-position: 0 bottom;
  }
}

サンプル

WikipediaにあったこのGIFファイル(420KB)
Artboard 1.gif

1コマ1コマ縦に繋げていきます(結合方法

Group.png

jpegファイルに書きだした結果 350KBでした。2割くらい削減できました。
書き出し設定の調整、色数の多いファイルだともっと削減できると思います。

-webkit-のプレフィックスをつければスマホでも動作します。
GIFアニメ作るのと手間もあまり変わらないし、JSとの連携もこっちのほうが楽ですよ!

ちなみに全部つなげるとこんな感じのjepgになります。
Artboard 1.jpg

19
20
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
20