スタッフブログ

STAFF BLOG

アプリ開発日誌

2021.11.05

データが大きいファイルを圧縮してみよう

パソコンを使っている皆さん、この圧縮ファイル「.zip とか .rar」などはみたことあるでしょうか?

通信する時や保存する時など、スペースを勿体無いの為、データを圧縮することが使われています。

しかし、パソコンはどうやってデータを圧縮するかは疑問に思ったことはありますか?

本日、データを圧縮することは簡単に説明いただきます。

データを圧縮することは大きく2種に分けています。非可逆圧縮(Lossy)と可逆圧縮(Lossless)です

非可逆圧縮(Lossy)

デジタル画像が一般的になるにつれて、1990年代初頭、不可逆圧縮方式が広く使用されるようになりました。 これらのスキームでは、不要な詳細を削除するとストレージスペースを節約できるため、情報の損失が許容されます。 情報の保存とサイズの縮小の間には、対応するトレードオフがあります。 非可逆データ圧縮スキームは、問題のデータを人々がどのように認識するかに関する調査によって設計されています。 たとえば、人間の目は、色の変化よりも輝度の微妙な変化に敏感です。 JPEG画像圧縮は、情報の不要なビットを四捨五入することによって部分的に機能します。 音声の音響心理学や画像やビデオの心理視覚など、多くの一般的な圧縮形式がこれらの知覚の違いを利用しています。

2-Figure1-1

可逆圧縮(Lossless)

可逆圧縮アルゴリズムは通常、統計的冗長性を利用して、情報を失うことなくデータを表すため、プロセスを元に戻すことができます。 ほとんどの実世界のデータは統計的な冗長性を示すため、可逆圧縮が可能です。 たとえば、画像に数ピクセルにわたって変化しない色の領域がある場合があります。 「赤ピクセル、赤ピクセル、…」をコーディングする代わりに、データを「279赤ピクセル」としてエンコードすることができます。 これは、ランレングスエンコーディングの基本的な例です。 冗長性を排除することによってファイルサイズを削減するための多くのスキームがあります。


この下、簡単に文書を可逆圧縮することの例です。圧縮をしてみよう!!

例として僕の好きな曲の歌詞を使います。

「Eric ClaptonのTears In Heaven」ぜひ、聴いてみてください。^_^

*見やすいようにintの数字なら<>の中に入りれて、青い文字位します。

Would you know my name if I saw you in heaven?

Would it be the same if I saw you in heaven?

I must be strong and carry on

Cause I know I don’t belong

Here in heaven

Would you hold my hand if I saw you in heaven?

Would you help me stand if I saw you in heaven?

I’ll find my way through night and day

Cause I know I just can’t stay

Here in heaven

全部345bytesとなります。


簡単な方法1:辞書

この歌詞はよく見ると「heaven」と「Would」は結構使っていますよね!

String(heaven)の代わりにint(1)に書いて、そして「1-heaven」を入れます。

String(Would)もint(2)にしましょう。そして「2-Would」を入れます。

<2> you know my name if I saw you in <1>?

<2> it be the same if I saw you in <1>?

I must be strong and carry on

Cause I know I don’t belong

Here in <1>

<2> you hold my hand if I saw you in <1>?

<2> you help me stand if I saw you in <1>?

I’ll find my way through night and day

Cause I know I just can’t stay

Here in <1>

<1>-heaven

<2>-Would

オリジナルは345bytes、圧縮したら316bytesとなります。


簡単な方法2:LZWアルゴリズム (基本はもっと複雑ですが、今回は簡単なバージョンで)

この方法を理解できるため、ASCII Binaryテーブルが必要です。

7f8564e0e3924fab7a7649fe83a36e9d

上のテーブルの参考で

8桁の数字 = 8bits = 1byte

h => 01101000(サイズは 1byte)

heaven => 01101000 01100101 01100001 01110110 01100101 01101110(サイズは 6byte)

Would => 01010111 01101111 01110101 01101100 01100100 (サイズは 5byte)

歌詞の1行目2行目を見ましょう

1行目

Would you know my name if I saw you in heaven?

2行目の時、Wouldとheavenは見たことありますね〜 代わりに<i,j>で書きます。

i = 逆算する文字数

j = コピーする文字数

じゃ、前から参考で書きしましょう

<47,5> it be the same if I saw you in <45,6>?

<47,5>とは今の時点から47文字前、5文字をコピーすることです。

数えて47文字前は1行目の「Would」なのです。

<45,6>も今の時点から45文字前、6文字をコピーすることです。

数えて45文字前は1行目の「heaven」なのです。

Byteで見ると、Would=5byte から int2たつで 47 5 = 2byteとなります。

これでサイズを減ることができます。前半のWouldとheavenだけ圧縮で書くと

Would you know my name if I saw you in heaven?

<47,5> it be the same if I saw you in <45,6>?

I must be strong and carry on

Cause I know I don’t belong

Here in <119,6>

オリジナルの前半は164byte

圧縮したの前半は153byte

だいぶ減ることができます。

本当のLZWアルゴリズムを使ったらもっとスマートなので、オリジナル345bytesから228byteくらいまでが減ることができます。

参考のオンライン圧縮はこの下のLinkです。ぜひ、遊んでみてください。

https://lingojam.com/ByteCounter

https://planetcalc.com/9069/

BACK

お問合せ

イーディーエーに興味をお持ちいただいて
ありがとうございます!
スマホアプリに関するご相談、
お見積りや弊社へのご質問など、
お気軽にお問い合わせください。
担当者より折り返しご連絡させていただきます。

    お名前必須
    会社名
    メールアドレス必須
    電話番号必須
    お問合わせ種別必須
    お問合わせ内容必須

    アンケートにご協力ください。
    弊社サイトへはどのようにしてアクセスされましたか?

    個人情報のお取扱いに関する同意事項

    1.事業者の氏名又は名称

    株式会社イーディーエー

    2.個人情報保護管理者の氏名又は職名、所属及び連絡先

    個人情報保護管理者 小宮 保人
    Mail:[email protected]

    3.取得した個人情報の利用目的

    当フォームで取得した個人情報は、お問い合わせに関する回答のために利用し、目的外利用はいたしません。

    4.弊社が取得した個人情報の第三者への委託、提供について

    弊社は、ご本人に関する情報をご本人の同意なしに第三者に委託または提供することはありません。

    5.個人情報保護のための安全管理

    弊社は、ご本人の個人情報を保護するための規程類を定め、従業者全員に周知・徹底と啓発・教育を図るとともに、その遵守状況の監査を定期的に実施いたします。
    また、ご本人の個人情報を保護するために必要な安全管理措置の維持・向上に努めてまいります。

    6.個人情報の開示・訂正・利用停止等の手続

    ご本人が、弊社が保有するご自身の個人情報の、利用目的の通知、開示、内容の訂正、追加又は削除、利用の停止、消去及び第三者への提供の停止を求める場合には、下記に連絡を頂くことで、対応致します。

    株式会社イーディーエー 個人情報お問合せ窓口
    〒106-0032 東京都港区六本木7丁目14番23 ラウンドクロス六本木4F
    TEL:03-5422-7524 FAX:03-5422-7534
    Mail:[email protected]

    7.ご提供いただく情報の任意性

    個人情報のご提供は任意ですが、同意を頂けない場合には、第3項にあります利用目的が達成できない事をご了承いただくこととなります。

    8.弊社Webサイトの運営について

    弊社サイトでは、ご本人が弊社Webサイトを再度訪問されたときなどに、より便利に閲覧して頂けるよう「クッキー(Cookie)」という技術を使用することがあります。これは、ご本人のコンピュータが弊社Webサイトのどのページに訪れたかを記録しますが、ご本人が弊社Webサイトにおいてご自身の個人情報を入力されない限りご本人ご自身を特定、識別することはできません。
    クッキーの使用を希望されない場合は、ご本人のブラウザの設定を変更することにより、クッキーの使用を拒否することができます。その場合、一部または全部のサービスがご利用できなくなることがあります。