先日、メカマスター氏から画像変換ツールの作成の依頼を受けた。
なんでも、ブログ書いてて画像を貼り付けるとき、ネットで拾ってきた画像をアメブロにUPするため何枚も適度な大きさに縮小するのが大変だということらしいのだ
ツールの出来がよかったのか気に入ってくれて、公開することになった!わーい
やっぱり自分のプログラムが人の役に立つというのはうれしいもんだなぁ(‐^▽^‐)!!
のだが、ツールを作るにあたり痛感したことがあった・・
それは・・
機能と努力(=プログラミングした時間)がまったく比例しないことだ!
簡単なツールだしプログラムは一瞬で終わるだろうと最初思っていた自分が今では情けない・・・
最初は、jpg→jpgでどんな画像でも横サイズを300ドットに統一する、ということで開発がスタートした。
まず画像のサイズ変換。
これはgzoomという命令を使えば一瞬で終わる。いわばスクリプトの芯となるところだ。
これはアンチエイリアシングも自動でかけてくれるのでとても助かる。
これだけなら何ら問題ではない。
むしろ依頼ではjpgで読み込みjpgで出力をしろと言っている。この部分だ!
実はHSP単体ではjpgで読み込むことはできても、jpgで出力することはできない!!
なんなんだろうかこの仕様・・
可能にするには新しい命令セットであるdllを導入しなければならない。
このためだけに外部ファイル「hspcv.dll」が必要になりソースのサイズが30行程度だったのが170行にまで増大した!
まぁその差の140行分はコピペだからぜんぜん大変じゃないんだけど、それでも画像保存命令はhspcvのを使わなきゃいかんし、途端にソースが複雑になった。
普通HSPの実行ファイルは120Kb前後なのだが、外部ファイル「hspcv.dll」=1.66Mbがついたことによりファイル全体が十数倍のサイズにまで膨れ上がった!
そう、bmp出力でなくjpg出力にするためだけにだ・・
しかしこれは序章に過ぎない!!
jpg読み込みをするとき「ドラッグ&ドロップ形式」で読み込んでほしいという依頼をすっかり見落としていたのだ!
私は単純に「ダイアログ形式」で画像を読み込むとプログラムがすごい簡単なのでそれでプログラムを組んでいた。ところが、読み直して気づいて事態が一変!
またもやHSPの壁。
ウィンドウにドラッグ&ドロップでもってきたファイルは、HSP標準命令では扱えない!
ドラッグ&ドロップで画像データを読み込むにはWin32 API関数を使わないといけない!
用はめんどくさいのだ!
具体的にどのくらい大変なことになるのか。
まずダイアログ形式で読み込むときは
dialog "",16
picload refstr
こんなんでいい
2行だ。ほかにバッファの確保、いろいろエラー防止の機能がつけられてもせいぜい15行くらいだろう。
しかしドラッグ&ドロップ形式で読み込むとなったときは、llmodだったかなぁ、2種類のモジュールをインクルードしないといけない。
HSPでドラッグ&ドロップが可能になるまでにソーススクリプトは800行も増えた・・。
この800行はコピペだ
が、そのあとの処理はプログラムする側にゆだねられているので
結局そこが大変なのである。
上のような2行の命令ではすまなくなる
ドラッグされるまで10行くらいあるルーチンをループし続け
ドラッグされ終わると文字型変数にそのファイルのディレクトリが保存、数値型変数にファイル数が出力される
そしたらループを抜け出し、まずファイルの数を確認し文字型変数からディレクトリを一つ一つ抽出しなければならない
いろんな命令でそれらをやりおえて、やっと、
picload 命令が使えるようになるのだ。
こうした見た目とは裏腹にプログラムの世界の大変さは地味なところにある。
普通に見ると多分、アンチエイリアシングとか、表示されている赤球の移動の計算が大変なのだろうと思うかもしれない。
が、私が一番大変だったのは画像を読み込むとき、読み込めるデータかそうでないかを識別することだった。
それは結局実装できなかった・・・ユーザーの皆さんごめんなさい
面白い話ではないが、こんな地味な・・・と思うようなところにいつもプログラマーは頭を悩ませているということを言いたかった。なんとも理不尽なことにw。
あー書きまくったらすっきりした!
ところで完成した「一定サイズ圧縮拳」には裏技機能がある!
まず1回起動すると「圧縮済み画像」というフォルダができるはずだ。
そこには圧縮画像と、システムデータが保存されてある。
システムデータは「sdata.txt」という名前で保存されていて、それは画像形式やサイズを保存している以外に「jpg品質」という数値も保存してある。
この「jpg品質」だけはツールのほうで指定できないのでこれを知ってる人しか変更できない。
なんでこんなややこしいことしたのかというと話は長くなるが、メカマスター氏と話して、シンプルいずベストってことになったからだ。
この品質は標準で95に設定されているが、txtで1~100に書き換えることでツールに反映される。
だからなんだwってことかもしれないけど遊び心でっでいうことで・・・
PS
あくまでvictorに転がってるようなしょうもないツールですが、メカマスター氏のブログを見てくださっている人にこのツールをご贔屓していただくと幸いです!
ダウンロードはコチラ です
これは便利なツールですね<br />さっそく役立たせていただきます<br />ありがとうございました</p>