Adobe Flex は、画像ファイルとして扱えるのは、PNG, JPEG, GIF, SVG の4種類だけ。
例えば、インターネット上の TIFF ファイルを URLLoader で取得して、それを Loader で、
みたいにビットマップデータとしてロードすることは出来ない。
つーことで、今回は Perl で wrapper として動く API プログラムを作成して、AIR アプリから TIFF ファイルへのアクセスがあった場合、JPEG 画像に変換してデータを渡すことにした。
例えば、TIFF 画像を $data に読み込んだ後で、Image::Magick モジュールを使って、
こんな感じ。
これで、$new_data に TIFF から変換された JPEG 画像データがセットされるので、
で、AIR アプリ側でも問題なく画像が表示される。
Image::Magick もたまにしか使わないので、いつもメソッドやプロパティを忘れてしまうので、一応、メモ代わりに書いておこう。
例えば、インターネット上の TIFF ファイルを URLLoader で取得して、それを Loader で、
bmp:Bitmap = Bitmap(event.target.content);
みたいにビットマップデータとしてロードすることは出来ない。
つーことで、今回は Perl で wrapper として動く API プログラムを作成して、AIR アプリから TIFF ファイルへのアクセスがあった場合、JPEG 画像に変換してデータを渡すことにした。
例えば、TIFF 画像を $data に読み込んだ後で、Image::Magick モジュールを使って、
use Image::Magick;
my $image = Image::Magick->new();
$image->Set(magick => 'tif');
$image->BlobToImage($data);
# 今回は、画像サイズを縮小するので、その処理も
my($width, $height) = $image->Get('width', 'height');
$height = int($height * ($Width(変更後の横幅) / $width));
$image->Resize(width => $Width, height => $height);
my $new_data = $image->ImageToBlob(quality => $Quality(画質), magick => 'jpg');
こんな感じ。
これで、$new_data に TIFF から変換された JPEG 画像データがセットされるので、
my $size = length($new_data);
print "Content-type: image/jpeg\n";
print "Content-Length: $size\n";
print "\n";
print $new_data;
で、AIR アプリ側でも問題なく画像が表示される。
Image::Magick もたまにしか使わないので、いつもメソッドやプロパティを忘れてしまうので、一応、メモ代わりに書いておこう。