【发布时间】:2016-08-16 07:24:04
【问题描述】:
我已经从 AS3 AIR 应用程序发送图像,除了 POST 参数的其余部分之外,PHP 脚本将完成其余的工作。我想以某种方式将带有图像的字节数组转换为字符串并用base64对其进行编码。成功了,但是图片数据有误。
这是我用来转换它的代码:
...
//BA1 is Byte Array with an image in it
var data:String = BA1.toString();
OutSql.push({t: "b1", v: Base64.encode(data)});
...
一切正常,此数据被发送到服务器,解码并存储为图像,但图像错误。不知何故,它大约是 40 kb,而当我将它保存在 Air 应用程序中时,它是 22 kb。有什么想法吗?
附言我知道我可以将它保存在本地并上传,但我真的需要这样做。此外,BA1.readUTF() 会产生错误,因此不是一个选项。
加法:
在服务器端,我尝试在写入文件之前对字符串进行 utf8_decode,但不知何故,我得到了一个尺寸合适的图像,但是......那个图像不是我想要的,它看起来像涂鸦......
【问题讨论】:
-
BA1是否包含 jpeg 或 png 的数据或仅包含原始 bitmapData(使用getPixels();表示字节)?如果它已经是 jpg/png 然后使用Base64.encode(BA1)那么 B64 本身会给你一个来自字节的编码字符串。无论如何,您的大小是 40kb(从 22kb)因为您使用了toString。现在考虑两个字节 0xFF 和 0xD8(总大小为 2)作为字符串,它是 FFD8,总大小为 4。转换加倍规模。如果可能的话,只做一个trace ("bytes are : " + BA1);然后在这里给我看 BA1 字节的前 8 个字母。这样更容易评估格式... -
BA1 包含 jpeg 数据。但是,尝试编码 BA1 会产生错误,因为只能编码字符串,不能编码字节数组。
-
这里是跟踪的答案:
bytes are : ÿØÿàJFIFÿÛ看起来像一个不错的 jpeg 标头。但是其余的数据只是一团糟。顺便说一句,图像 siye 是正确的。 -
为什么不将图像作为二进制发送?
标签: php actionscript-3 flash air bytearray