1

ディスクから jpeg/png 画像をロードしてフレックスで表示し、base64 でエンコードされた文字列としてサーバーに送信できるようにする必要があります。しかし、画像ファイルが読み込まれると、私のflash.display.LoaderInfoオブジェクトでは、bytesプロパティ (の型ByteArray) にファイルの内容よりも多くのバイトが含まれます。

例: 画像ファイルのサイズ: 3089 flash.display.LoaderInfo.bytesTotal:3089 flash.display.LoaderInfo.bytes.length:3155

base64 文字列をエンコードする必要があるためflash.display.LoaderInfo.bytes、ByteArray オブジェクトのどの部分をサーバーに送信する必要があるかわかりません。ファイルの元の品質を維持する必要があるため、bytearray コンテンツをビットマップ イメージに描画して jpg として再エンコードしたくありません。

ありがとう

いくつかのコード:

private function onDataLoadComplete(event:Event):void {
                var encoder:Base64Encoder = new Base64Encoder();
                //var imagePartBytes:ByteArray = new ByteArray();
                //imagePartBytes.writeBytes(event.target.bytes, 0, event.target.bytesTotal); 
                //imagePartBytes.writeBytes(event.target.bytes, 0, event.target.bytes.length); 
                //imagePartBytes.writeBytes(event.target.bytes, event.target.bytes.length-event.target.bytesTotal, event.target.bytesTotal); 
                encoder.encodeBytes(event.target.bytes);
                var imagePart:String = encoder.flush();
                trace(imagePart);
                data = fileName+";"+event.target.contentType+";"+imagePart;
                _changed = true;
            }
4

2 に答える 2

1

パトリックさん、返信ありがとうございます。解決策を見つけました。私は FileReference を使用して画像をフラッシュ プレーヤーに直接ロードし、Loader を使用して画像をステージにロードしていました。私が必要とする ByteArray である FileReference.data の代わりに、ローダーの ByteArray をエンコードしようとしていました:)

var encoder:Base64Encoder = new Base64Encoder();
encoder.encodeBytes(fileRef.data);
imagePart = encoder.flush();

そしてそれは動作します。

于 2009-12-18T09:49:34.503 に答える
0

通常、bytearray のすべてのコンテンツを送信する必要があります。画像をどのように読み込んでいますか? データをバイナリ形式で受け取っていますか? 読み込んだ画像を表示しても問題ありませんか?

データを base64 でエンコードすると、8 ビット長のデータを 6 ビットで再エンコードするため、結果のデータ長は元より長くなります。したがって、1 バイトの場合、2 バイトに収まります。

于 2009-12-18T09:34:11.757 に答える