SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
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
辞書
という操作を繰り返す
なるほど!!!!
皆さんも圧縮アルゴリズムを
考案しましょう!!!!

Mais conteúdo relacionado

Destaque

オープンソースカンファレンス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 METHODSFeroz 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
 

Destaque (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)
 

Mais de 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 アプリケーションにおける MVCYu 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::WebSocketYu Nobuoka
 

Mais de 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
 

Último

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 

Último (8)

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 

GIF と LZW 圧縮と GifWriter.js