[Titanium Mobile] アプリ内で選択した画像をResize

android_image-resizeアプリ上で複数の写真を選択してサーバーにアップロードする仕組みを作っているときに、画像を適当な大きさにリサイズするやり方を調査したときの覚書。

環境: Titanium SDK 3.1.1.GA

検索して出てくるのが、imageView経由で変換する方法。

SDK 3.0からはAndroidでも
Titanium.Blob.imageAsResized
が使えるようになっているので、これを使うのが正攻法。

ただ試してみるとAndroid2.3.3搭載の端末(AQUOS PHONE SHARP IS14SH)では落ちる。

他にいい方法がないものかと検索すると、古い端末でも動くモジュールを開発してくれている方がいた。

このモジュールを導入して試してみると、リサイズされずに切り抜いた画像になってしまう。この現象を開発者の方に質問してみたのがこちら。

丁寧に対応してくれて無事リサイズされるようになった。

ただ、これを端末で試してみると数回に一回落ちる(あとで別の原因が分かったので、このモジュールとは関係ない)。

しょうがなくAndroid2.3.3以下は選択した画像そのままアップロードする仕組みに変更。この場合サーバーのアップロード制限に引っかからないようにチェックは必要。

 

次に遭遇したのがPOSTした画像をPHPで扱う際に、なぜかファイル名が「.txt」になっている現象。Android端末のみ。

Titaniumで加工した画像をアップロードするとなるみたい。

PHP側で置換することで対応。

foreach ($_FILES as $key => $file) {
    $name = $file['name'];

    // Adjust file name for android app
    if (!empty($name) && strpos($name, '.txt') !== false) {
        $name = str_replace('.txt', '.bmp', $name);
        $file['name'] = $name;
    }
    // save files
}

他に似たような問題で困っている人もいないみたいなので、別の手法がありそうな予感。

 

< Related Posts >