SlideShare a Scribd company logo
GIF と LZW 圧縮と
GifWriter.js
id:nobuoka
(@nobuoka)
2013-05-23 Kyoto.js #8
こんにちは!
id:nobuoka です
Java とか
JavaScript とか
好きです
突然ですが
GIF の発音について
「ジフ」? 「ギフ」?
https://twitter.com/christinecuoco/status/337015639698989056/photo/1 より
GIF 考案者
Steve Wilhite 氏
Webby 賞の生涯貢献賞受賞
というわけで
GIF の話
GifWriter.js という
JavaScript ライブラリを
つくりました
デモ
http://nobuoka.github.io/GifWriter.js/
canvas のピクセルデータ
(ImageData) から
GIF のバイト列を生成
ImageData
(32-bit/pixel)
Indexed color
image
(最大 256 色)
GIF 画像
バイト列
減
色
処
理
GIF
エ
ン
コ
ー
ド
減色処理難しい!!
今回はメディアンカット法
GIF エンコード!!
W3C に spec がある
http://www.w3.org/Graphics/GIF/spec-gif89a.txt
画像データは
LZW 圧縮の亜種 (?)
で圧縮される
LZW 圧縮の話
辞書式圧縮法 (の辞書の例)
圧縮後符号 生の符号の列
0 0
1 1
2 111
3 000
... ...
LZW 圧縮では生の符号の
並びから自動的に辞書が
決まる
LZW での辞書の初期状態は
圧縮後符号と生の符号が同一
圧縮後符号 生の符号の列
0 0
1 1
2 2
3 3
... ...
圧縮対象符号列から
順に符号を取り出して連結
↓
辞書になければ登録 &
辞書にある分だけ書きだし
意味がわからないと
思うので例を書きます!!
1 1 1 0 2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
辞書には初期状態で長さ 1 のすべての生の符号列が
含まれる (圧縮後の符号値と生の符号値が同一)
圧縮後 生符号列
0 0
1 1
2 2
3 3
辞書
{ 0, 1, 2, 3 } の 4 つの符号からなる符号列の LZW 圧縮の例
1 1 1 0 2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
まずは最初の符号を取り出す
圧縮後 生符号列
0 0
1 1
2 2
3 3
辞書
1
1 1 0 2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
1 は既に辞書に入っているので次の符号の取り出しへ
圧縮後 生符号列
0 0
1 1
2 2
3 3
辞書
1 1
1 0 2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
1 1 は辞書にないので辞書に追加して、辞書にある部分
だけ (最後の符号を除いた前の部分) を書きだし
圧縮後 生符号列
0 0
1 1
2 2
3 3
4 1 1
辞書
1
1
1 0 2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
次の符号を取り出す
圧縮後 生符号列
0 0
1 1
2 2
3 3
4 1 1
辞書
1
1 1
0 2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
1 1 は辞書にあるので、次の符号の取り出しへ
圧縮後 生符号列
0 0
1 1
2 2
3 3
4 1 1
辞書
1
1 1 0
2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
1 1 0 は辞書にないので辞書に追加し、辞書に存在
する部分だけを書きだす
圧縮後 生符号列
0 0
1 1
2 2
3 3
4 1 1
5 1 1 0
辞書
1 4
0
2 1 2 1 2 1 1 1
圧縮対象
バッファ
圧縮後
圧縮後 生符号列
0 0
1 1
2 2
3 3
4 1 1
5 1 1 0
辞書
という操作を繰り返す
なるほど!!!!
皆さんも圧縮アルゴリズムを
考案しましょう!!!!

More Related Content

Viewers also liked

オープンソースカンファレンス2012大分資料
オープンソースカンファレンス2012大分資料オープンソースカンファレンス2012大分資料
オープンソースカンファレンス2012大分資料俊之 渡邊
 
WordBench大分第二回勉強会資料
WordBench大分第二回勉強会資料WordBench大分第二回勉強会資料
WordBench大分第二回勉強会資料
俊之 渡邊
 
Giao an hoa hoc 11 nang cao tron bo
Giao an hoa hoc 11 nang cao tron boGiao an hoa hoc 11 nang cao tron bo
Giao an hoa hoc 11 nang cao tron boHue Bui
 
OSC2015大分 Scratch資料
OSC2015大分 Scratch資料OSC2015大分 Scratch資料
OSC2015大分 Scratch資料
俊之 渡邊
 
Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムAndroid アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステム
Yu Nobuoka
 
CREATING BLOG PROFITS WITH SIMPLE METHODS
CREATING BLOG PROFITS WITH SIMPLE METHODSCREATING BLOG PROFITS WITH SIMPLE METHODS
CREATING BLOG PROFITS WITH SIMPLE METHODS
Feroz Khan
 
激熱プラグインCustom Field SuiteとWordPress Front-end Editorをさわってみよう!
激熱プラグインCustom Field SuiteとWordPress Front-end Editorをさわってみよう!激熱プラグインCustom Field SuiteとWordPress Front-end Editorをさわってみよう!
激熱プラグインCustom Field SuiteとWordPress Front-end Editorをさわってみよう!
俊之 渡邊
 
Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)
Yu Nobuoka
 

Viewers also liked (8)

オープンソースカンファレンス2012大分資料
オープンソースカンファレンス2012大分資料オープンソースカンファレンス2012大分資料
オープンソースカンファレンス2012大分資料
 
WordBench大分第二回勉強会資料
WordBench大分第二回勉強会資料WordBench大分第二回勉強会資料
WordBench大分第二回勉強会資料
 
Giao an hoa hoc 11 nang cao tron bo
Giao an hoa hoc 11 nang cao tron boGiao an hoa hoc 11 nang cao tron bo
Giao an hoa hoc 11 nang cao tron bo
 
OSC2015大分 Scratch資料
OSC2015大分 Scratch資料OSC2015大分 Scratch資料
OSC2015大分 Scratch資料
 
Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムAndroid アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステム
 
CREATING BLOG PROFITS WITH SIMPLE METHODS
CREATING BLOG PROFITS WITH SIMPLE METHODSCREATING BLOG PROFITS WITH SIMPLE METHODS
CREATING BLOG PROFITS WITH SIMPLE METHODS
 
激熱プラグインCustom Field SuiteとWordPress Front-end Editorをさわってみよう!
激熱プラグインCustom Field SuiteとWordPress Front-end Editorをさわってみよう!激熱プラグインCustom Field SuiteとWordPress Front-end Editorをさわってみよう!
激熱プラグインCustom Field SuiteとWordPress Front-end Editorをさわってみよう!
 
Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)
 

More from Yu Nobuoka

5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
Yu Nobuoka
 
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るAndroid アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Yu Nobuoka
 
AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行
Yu Nobuoka
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
 
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Yu Nobuoka
 
はてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテストはてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテスト
Yu Nobuoka
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
Yu Nobuoka
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Yu Nobuoka
 
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
Yu Nobuoka
 

More from Yu Nobuoka (9)

5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
 
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るAndroid アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
 
AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成
 
はてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテストはてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテスト
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
 

Recently uploaded

LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 

Recently uploaded (8)

LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 

GIF と LZW 圧縮と GifWriter.js