Entering Passive Mode

カテゴリ 'Perl' の記事
< 1 2 3 4 5 6 7 8 9... >

IO レイヤに代わるもの

Perl 5.8 では、以下のように指定すると、
出力時に、内部表現から shift_jis に変換してくれる。

binmode STDOUT, ":encoding(shift_jis)";

Perl 5.8 の文字列は、utf-8 フラグによっては、
ただのバイト集合ではなく、「文字」列となる場合がある。
この場合、length などが返すのは文字数になる。
しかし、Perl 5.6 では、文字列はただのバイト集合だ。
この場合 length などが返すのはバイト数である。

枯れたサーバ

今日は久々に社用 Web のスクリプトの修正を行った。
っていっても、ホスティングだけど。

普段は手元の環境で開発してるので、
Perl なりモジュールなりは最新版が入っているが、
いざ枯れたサーバで運用するとなれば、
意外に環境が制約されるものだ。

特に Perl の場合、バージョンやモジュールの有無によって
開発効率が結構変わってくる。
小さなスクリプトとなるとなおさらだ。

背景色への最適化

計算方法 回転

さて、いよいよ大詰めだ。今日で最後となる。

今日は、画像のサイズをうまく調整し、
背景との間のぎざぎざを取り払って完成させよう。

まず、回転後の画像のサイズだが、
実はあらかじめ計算しておくことができる。
そうすれば、背景色だけの領域を最低限にすることができる。

ではどうやって求めるか。

線形補間による回転

回転

今日は、線形補間を適用してみよう。

基本は、拡大縮小の時と同じだ。
新しいピクセルから元のピクセルを参照する際の
計算式を回転に差し替えればいいのだ。

ただ、回転の場合、丁度四角形には収まらないので、
回転後のピクセルに対応する回転前のピクセルが、
範囲外の座標になることが多い。
そのため、境界位置のチェックが必要になる。

中心を基準に回転

回転

昨日の回転では、回転の基準が左上となっていた。
なので、180 度とか回転すると、画面の外にいってしまう。
また、画面内に見えたとしても、画像の端が切れていた。
今日はそれを修正しよう。

まず、回転の基準を画像の中央にすること、
これは、画像の幅や高さの半分を引いてから
座標の計算をすれば良い。

次に、回転したときに端が切れないようにすること。
どの角度でも入りきるように長さを考えれば良い。
その長さとは、画像の左上から右下までの斜めの長さである。
これは、ピタゴラスの定理により、
(高さの自乗+幅の自乗)の平方根で求められる。

任意角度の回転

計算方法 回転

今日は、任意角度の回転を考える。

回転後と回転前のピクセルが、
どのような位置関係か考えてみよう。
細かい説明をするとややこしいので図を載せておく。
図では、点を回転させるのでなく、座標系を回転させている。

計算には、三角関数のサインやコサインが必要となるが、
計算に必要な関数は言語側に用意されているので、
計算式だけ丸覚えしておけば、特に考える必要はない。

画像の回転

補間できる対象は、画像のサイズ変更だけではない。
回転などもその代表例だ。

回転は縦横の座標の計算が絡むので、意外にややこしい。
回転には角度があるが、角度があるということは、
数学の三角関数の考え方が必要になってくるということだ。

例外的に 90 度単位の回転で、90、180、270 度に関しては、
縦と横の座標変換だけで簡単にできる。
それ以外の角度の場合は、端数が出るため補間が必要となる。

線形補間法の特徴

線形補間法の特徴は、近傍法とは対照的である。

周辺の色によって中間色を計算するため、
アンチエイリアス処理により、そこそこ良い品質となる。
イラストや線画、文字などに対しても効果を発揮するのだ。

ただ、計算結果として新しい色が生成されるので、
生成された画像は、通常フルカラーである。

つまり、カラーテーブルを持つ画像に適応する場合でも、
計算結果はフルカラーとなる。
カラーテーブルを維持するためには、
以前示した方法などで、減色処理を行う必要がなる。

線形補間法による実装

3x3 画像1 画像2

さて、今日は昨日紹介したアルゴリズムである、
線形補間法をコードで実装してみよう。

ピクセルを領域として考えないと、
画像の端にあるピクセルの情報量が減ってしまうことは、
以前、「ピクセルは点か領域か」の日記で考察した。
なので、ピクセルを領域として計算する方法で行いたい。
その場合、コードを書く前に座標の問題を考える必要がある。

何が問題かというと、画像の端に当たるピクセルの計算時に、
元の画像の範囲を超えてしまう可能性が考えられるのだ。
これは、近傍法では起こらない。

線形補間法

計算方法

今日紹介するのは線形補間法だ。
線形補間法はバイリニア法とも呼ばれ、存在しない点を、
周辺のピクセルの色を使って算出する方法である。

例えば、電球が 4 つ、四角形に並んでいるとする。
電球を A, B, C, D としよう。
それぞれが適当な色を持って光っている。

A   B
 F   
  E  
     
C   D

< 1 2 3 4 5 6 7 8 9... >
このページのトップへ戻る
© 2008 Project Loafer/Project Fireball and all blog writers. Powered by Nucleus CMS