08:圧縮解凍と多重処理

◆PROCESSINGで始めるゲーム作りとコンピュータ

village 08:圧縮解凍と多重処理

今日の話題

 

24:圧縮と解凍

コンピュータを利用する場合、圧縮と解凍にお世話になる事が多いです。

布団などをビニール袋に入れて空気を抜き、ぺちゃんこにする商品をご存知ですか?。布団をそのまま押入れに格納するとカサ張るので、ぺちゃんこにして小さくまとめて格納するわけです。

圧縮とは、ちょうどそんなイメージです。特殊な処理で情報(ファイルなど)のサイズを小さくする処理になります。

なぜそんな事をするのでしょう?。

今では高速なインターネット環境が整備され格安で利用できるようになったので、あまり実感がわきません。でも、昔の通信環境はとても貧弱だったのです。

貧弱(遅い)通信環境でファイルを転送する場合、通信時間が長くなります。通信時間が長くなると、それだけ費用がかかります。そこで少しでもファイルのサイズを小さくするための処理が考え出されたのです。

砂時計
(画像URL:illust-AC 様:acworks さん)

いまでもUSBメモリやSDカードなど、格納できる容量に限りがあるものにファイルを格納する場合に良く利用されます。

圧縮の逆で、圧縮されたファイルを元に戻して利用できるようにする処理が解凍です。

圧縮の逆だから「拡張」とか「復元」と呼んだ方が適切な気もするのですが、なぜか昔から「解凍」と呼びます。レンジでチーンのイメージですね(笑)。

ちなみに「情報をひとまとめにする事」を専門用語で「アーカイブする」といいます。

多くの圧縮解凍用アプリケーションでは、沢山のファイルを圧縮しながらひとまとめにする機能を持っているため、圧縮解凍用アプリケーションのことを「アーカイバ」などと呼ぶことがあります。

PCでファイルを圧縮するのによく使われる方式には、以下の様なものがあります。

  • zip(ジップ):Windowsでも採用されている最もメジャーな方式
  • LHA(エルエイチエー):日本人(奥村さんと吉崎さん)が考案した方式
  • 7z(セブンゼット):高い圧縮率を誇る方式
  • RAR(ラー):誤り検知機能をもち、ファイルの復元率が高い方式
  • CAB(キャブ):主にWindowsで採用されている方式

それでは圧縮はどのように行うのでしょうか?。

上記で紹介した実用的な圧縮方式には、私には理解不能な難しい計算が使われていますので説明できません(汗)が、ここでは最も簡単な圧縮方法を紹介します。

例えば以下の様な32個(32bit)の1と0がつながった情報があるとします。これを圧縮する事を考えます。
圧縮前
これだけを見ていると、どうすれば良いのか全然よくわかりません(笑)。そこで「1と0がいくつ連続しているか?」に注目してみてみます。

圧縮前2
連続性に注目すると、この情報は先頭から0が5個、次は1が11個、その次は0が15個、最後は1が2個繰り返している事がわかります。

そこで、この情報を「1か0が+いくつ連続しているか」に分けて書き直します。たとえば先頭なら0が5個連続していますので、0 が 5つ(2進数で0101)=0と0101 に置き換えるのです。
圧縮後
同じように2番目、3番目、4番目も「1か0が+いくつ連続しているか」に置き換えます。

するとこの情報は全部で20bitあれば表現できる事がわかります。つまり32bitの情報が20bitに圧縮されたのです!。

このような圧縮方法を「ランレングス方式」と呼びます。実際に白黒の情報しかない(例えばモノクロのFAX転送処理など)では今でも利用されている方式になります。

 

25:画像圧縮形式

ファイルなどに使われるさまざまな圧縮方式を紹介しました。PCで扱うもので、データ量が大きなものには画像データがあります。絵のデータですね。

多彩な色を使う大きな画像データは、膨大な情報量になります。そこで画像には「それ専門」の圧縮方式が考えだされました。代表的な圧縮方式には以下のものがあります。

  • PNG(ピング。ポータブル・ネットワーク・グラフィックス):透過情報を扱う事が可能な形式。可逆方式
  • JPEG(ジェイペグ):高い圧縮率を誇る形式。写真など風景画像向き。非可逆方式
  • GIF(ジフ。グラフィックス・インターチェンジ・フォーマット):256色以下の画像を扱う形式。可逆方式

画像データに用いられる圧縮方式には、「可逆方式」と「非可逆方式」があります。

可逆方式とは、読んで字のごとく「解凍した時に、完全に元通りになる方式」です。非可逆方式とは「解凍しても、完全には元に戻らない方式」です。

完全に元に戻らない圧縮方法なんて意味があるの?と疑問になりますよね。でもちゃんと利用価値があるのです。非可逆方式は完全に元に戻らない代わりに、高い圧縮率を誇ります。

画像データは沢山の画素(ピクセルとも言います。色のついた点々ですね)が集まってできています。画素は非常に細かいので、写真などの場合、人間の目には少しばかり画素が抜けたり、違った色になっていても判別できません。

画素(画像URL:luxetravel.com

この特徴を活かして、完全には元には戻らないけど高い圧縮率を得たほうが良い場合(写真画像など)に利用するのが非可逆方式なのです。

逆にアニメちっくなベタ塗りが多い画像では、一部の画素が抜けたり色が変わるとすごく目立ちます。なのでアニメやイラストの圧縮では可逆方式が用いられます。

アニメ画素(画像URL:ソードアート・オンライン

このようにどんな画像かに応じて、それぞれの圧縮方法を使い分けます。

PROCESSINGでは、PNGもJPEGもGIFも全て扱うことが可能です。

PNGは透過情報といって、透明な(半透明などを含む)画像を扱うことができる形式です。また今回のゲーム制作ではアニメちっくなベタ塗りが多い画像を利用しますので、PNG形式を採用する事にします。

 

26:多重処理

コンピュータでは様々な処理を同時に行うことが可能です。例えば音楽を聞きながらIEでインターネットを見るとか、ダウンロードをしながらYoutubeを楽しむなどですね。

複数の処理を同時に行わせることを、専門用語で「多重処理」といいます。

人間なら同時に沢山の仕事をしろといわれると混乱してしまいそうです。ところがコンピュータは上手にこなします。これは、どういう仕組になっているのでしょうか?。

コンピュータの頭脳はCPUと呼ばれる部品です。

最近のCPUはマルチコアといって、考える(計算する)部分が1つのCPUに複数搭載されています。これがコンピュータが多重処理を行える1つの理由となっています。

マルチコア(画像URL:公安9課 様、illust-AC 様:acworks さん、kaeru-ya さん)

ところが多くのコンピュータでは、CPUに1つの考える部分しかない(シングルコア)場合であっても、多重処理を行うことが可能です。なぜでしょうか?。

人間の場合で考えてみましょう。

あなたが上司からAの書類整理と、Bの会議日程調整を同時に頼まれたとします。こんな時、右手でAを、左手でBを、同時に行える聖徳太子みたいな人は、まずいませんよね?(笑)。

こんな場合は、まず目処がつくまでAをやり、区切りがよい所でBをやります。特にBは調整作業なので、相手からの連絡を待つ時間がありそうです。だから待っている時間は、再びAをやります。

多重処理
(画像URL:illust-AC 様:くりまん さん)

こんなふうに、それぞれの仕事の空き時間を利用して上手に処理を分割して実行するのではないでしょうか?。

コンピュータも同じなのです。

複数のアプリケーションを同時に実行する場合、Aを実行し、区切りが良い所でBに切り替え、また区切りが良い所でAに戻るといった具合で、アプリケーションを切り替えながら作業をします。

CPUは猛烈な速さで動作します。ですので、このアプリケーションの切り替えも、目にも留まらぬ速さで行うのです。

こうする事で、人間の目には複数のアプリケーションが同時に実行されているように感じられます。まるで忍者が使う分身の術みたいですね(笑)。

分身の術
(画像URL:illust-AC 様:kumi さん)

このコンピュータ版分身の術を、専門用語で「時分割多重処理」、あるいは「ラウンドロビン処理」と呼びます。

 

Forest今日の言葉

・圧縮

ファイルや画像のサイズをコンパクトにする処理。布団圧縮機みたい?なものです。

・解凍

圧縮の逆です。ファイルや画像を元の状態に戻す処理です。

・zip(ジップ)

ファイル圧縮方式の1つ。最も良く使われている圧縮方法です。

・LHA(エルエイチエー)

日本人が考案した圧縮方式。昔からPCで使われてきた伝統的な方法です。世界的にはマイナーなため、最近はあまり利用されていません。

・7z(セブンゼット)

zipよりも高い圧縮率を出せる圧縮方式。わりとマイナーですが、時々見かけます。

・RAR(ラー)

誤り検知と呼ばれる機能を搭載した圧縮方式。誤り検知機能により、圧縮データの一部が壊れてしまっても復元する事ができます。古代エジプトでは太陽神をラーと呼んだそうですが、関係はないと思います・・・。

・CAB(キャブ)

Windowsで採用されている圧縮方式です。Windowsの場合は、これもよく使われます。

・ランレングス方式

圧縮方式の1つ。データの連続性に注目して圧縮する方法です。FAX転送などで利用されています。

・PNG(ピング。ポータブル・ネットワーク・グラフィックス)

画像圧縮形式の1つ。透過色(透明な色)を扱うことが可能です。可逆方式です。アニメやイラストなどベタ塗りが多い画像を圧縮する際に利用されます。

・JPEG(ジェイペグ)

画像圧縮形式の1つ。非可逆方式ですが非常に高い圧縮率を誇ります。写真画像を圧縮する際に用いられます。

・GIF(ジフ。グラフィックス・インターチェンジ・フォーマット)

256色以下の画像を圧縮する方式。可逆方式です。色数が少なくて良い場合(例えばWEB画像など)に良く使われます。

・可逆方式

圧縮したデータを元に戻した時、圧縮する前と同じ状態に戻る方式。zip、LHAなどファイル圧縮はもちろんですが、PNGやGIFも可逆方式になります。

・非可逆方式

圧縮したデータを元に戻した時、圧縮する前と同じ状態には戻らない方式。JPEGに使われています。

・多重処理

いくつもの作業を同時に行う事です。コンピュータでは、複数のアプリケーションを同時に処理させる事を、こう呼びます。

・マルチコア

1つのCPUに、考える部分(コア)が複数ある事を指します。最近のCPUは、ほとんど全てがマルチコアですね。

・シングルコア

1つのCPUに、考える部分(コア)が1つしなない事を指します。昔のCPUは、みんなシングルコアでした。

・時分割多重処理(ラウンドロビン処理)

多重処理をコンピュータで実現する方法です。コンピュータ版の分身の術(笑)。普段はあまり意識することはありませんが、プログラマーを目指す方は、そういう仕組でコンピュータが動作している事は知っておいたほうが良いでしょう。

 

 今日のまとめ

  • データ量をコンパクトにする処理を圧縮、圧縮を元に戻す事を解凍と呼ぶ
  • 圧縮方式には様々なものがある
  • 画像の圧縮方式には、可逆方式と非可逆方式がある
  • コンピュータで複数の処理を同時実行する事を多重処理と呼ぶ

10:PROCESSINGを手に入れよう に進む
07:ゲームで理解する論理演算 に戻る
目次へ戻る


本ページで利用している特に参照元記載のないアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。