[Titanium Mobile] アプリ内で選択した画像をResize
アプリ上で複数の写真を選択してサーバーにアップロードする仕組みを作っているときに、画像を適当な大きさにリサイズするやり方を調査したときの覚書。
環境: Titanium SDK 3.1.1.GA
検索して出てくるのが、imageView経由で変換する方法。
- Can photos be resized on the device? | Community Questions & Answers | Appcelerator Developer Center
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 >