アルファギークに聞いたPhotoshopの仕組み
プログラミングとは!抽象的な表現を、可能な限りシンプルな条件に細分化すること!(どや
仲良しのギークさんと 「Photoshop って頭いいよねえー」 という雑談をしていたら、
ふと「そーいや Photoshop って何(言語)でできてるの?」 と疑問が湧いてきた。
なので、気になることをいろいろ聞いてきたよ!
Photoshopって何言語で作られてるの?
これ、違うクラスタの2人のギークさんに個別に聞いたんだけど、
「C とか C++ じゃない?」「C とか Visual Basic とかじゃないの」という返事が返ってきた。
なぜ!なぜ C だと思うの!PHP や Perl だと思わない理由はなに!?
「コンパイルするからね」
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!っ!!!!!!!!!?
と、コンパイルという言葉でテンション上がったのはさておき。
コンパイルするとどんなメリットがあるの?
「実行速度が早くなる」
「PHP や Perl は、Web サービスならいいけど。Photoshop は、買われちゃったらもう修正できないから」
キュンキュンキュン! キュンキュンキュン!
私は学歴も知識もありませんしブスですが、コンパイルに関してはプロフェッショナル。
つまり、ユーザが Photoshop のコマンド(レベル補正とか)を実行したとき、
その処理が早いのね!なぜならコンパイルしてあるから!!
やばい、これからフィルタ実行するたび胸が熱くなるな……
この子たち、コンパイルされちゃったからこんなに素直でいい子なのね………
そういえばどこかで、というか今まで何度も読んだなw
PHP みたいにコンパイル不要の言語は、処理しながら実行するから遅いのだった。
そして C のようにコンパイルしなきゃいけない言語は、その分手間だけど速度が速い、と。
テキストで読んで頭で理解してるつもりでも、具体例でピンと来てないと身につかないのぅ。。。
修正したくなったらどうするの?また一から全部コンパイルするの?
「ありえない」「Photoshop クラスのソフトがファイルを分けてないはずがない」
ですよね><
だからもし、どっかをちょっとだけ直したいなーって思ったら、
その部分のファイルだけ修正 & コンパイルすれば OK!なんだって♪
具体的にどういうプログラムを書いてるの?
「写真はドットの集合体だから。ぼかしなんかは想像つくよね」
たとえば、ある範囲を指定して、その周辺の背景となじむようにぼかしたい場合は、
指定範囲の内と外のピクセルの値を近いところまで持っていけばいい、と。
なるほどなるほどなるほどなるほど!だんだん超わかってきた(・∀・)
プリクラの美白効果や目を大きく見せる加工も一緒かな?
「そうそう。肌色部分を認識して、その部分の明度を上げる。
黒目を大きく見せる場合は、たとえば顔の中央からほぼ等しい位置に、
白で囲まれた2つの黒い部分があったら、その部分を少し大きくする、とかね^^」
完全に超わかってキター\(^o^)/\(^o^)/
そうか、そうかそうか。Photoshop の人物認識とかマジどうやってんの!?って思ってたけど、
人物や顔、そのパーツをコンピュータに理解させるというのは、つまりそういう作業なんだ。
プログラマーは、「顔」 という言葉を 「中央に縦線、そこから左右ほぼ等距離の位置に白で囲まれた黒点…」
という風に論理的にかみ砕いて、Photoshop のさまざまな効果を表現していくのね。
「この子を可愛くして!」って言われたらどうする?
「可愛いの定義による。俺が可愛いと思ってもその人はそう思わないかもしれないし。
着物着てないと可愛くない!とか言い出したら、仕様レベルで変更しなきゃいけないし」
わかりますわかります。もう私にもよくわかります。
つまり、「可愛い」 という抽象的な表現ではなく、「肌が白い」 「唇がピンク」 「あごをシャープに」
という感じで、具体的に言ってくれなきゃダメだよね><
抽象的な表現を具体化するのは誰の仕事?
「できるディレクターならやってくれるけど、たいがいはこっち(プログラマー)」
でJIMA!? はぁー、そりゃたいへんだ。
というか、ここまで聞いて、いろいろなことが腑に落ちた気がする。
そうか、あのときあの人はここで悩んで煮詰まってたのかなーとかw
だったらそう言ってくれたらいいのにー!って今となって地団太だけど、
言っても理解できないし時間無駄と思われてたっぽいし、実際その判断は正しかったように思うw
ふむむ。プログラマーには優しくしよう。機会があれば。
ところでコンパイルってさ
私の中ではミサワ絵の「カチャカチャ・・・ッターン!」のイメージなんだけど合ってる?
「だいたい合ってる」