画像のナゾ

WebcamやNewsJPなどでオンラインから取得した画像が表示できない理由なんだが、これは要するに取ってきたファイルを正しく画像として認識できてるかどうかの問題だ。
Konfabulatorでは1.5以降のどこかのアップデートで、画像ファイルの認定がカラくなった。万一、画像ファイル以外のものを画像として表示させようとした場合に起きる不具合に対処した結果なので、これはこれで仕方ないが、そのため、前に作られていたwidgetでは何も考えずに表示できていた画像ファイルが表示できない場合がある。WebcamやNewsJPの問題はまさにそれ。


じゃあ、とりあえずどう対処すればいいか、だが、いちばん確実なのは、jpg, gif, pngなど正しい拡張子をつけてやること*1。そうすれば、Konfabulatorが確実にそれらの画像ファイルだと正しく認識し、表示してくれる。NewsJPなどのwidgetはオンラインから拾ってきたファイルを一時的に保存するので、そのときのファイル名に正しい拡張子を付ければいい。
ただし、この方法には一つ問題がある。オンラインから画像を取ってくる場合、その形式がjpgなのかgifなのか、一意に決めることができないのだ。取ってきたファイルの画像形式によって保存するファイル名を変える必要がある。


そこで以前、紹介したNewsJP用の修正コードでは、読みにいくURIの最後の拡張子を利用して画像形式を判断してたわけだ。

また、WidgetPatcherに含まれているNewsJP修正コードでは前のヤツでうだうだ言ってた方法で保存したファイルの形式を判別し*2、適宜*3拡張子を付けるようにしている。
ただし、まれにbmpなのにfileコマンドではjpgと誤判別される場合もあるようなので、WidgetPathcerの方は誤判別のときに備えて手動でjpg,gifを選べるようなモードも付けてる。自動判別で表示できないときは試してみるといい。

*1:他にも画像によっては元画像と同じかそれ以上の大きさのwidth, heightを指定すると自動判別可能になる場合もあるようだ。理由はよくわからんが。

*2:シェルからfileコマンドを使ってる

*3:今のところ、jpg, gif, pngにのみ対応