gpt4 book ai didi

php - 从 Android 中的 Web 服务恢复 base64 图像

转载 作者:行者123 更新时间:2023-11-30 03:37:21 25 4
gpt4 key购买 nike

我正在用 android 开发一个应用程序,它连接到 php 中的 Web 服务。用户可以发送图片,或者更确切地说,将能够发送图片给其他用户。

现在图像通过类型为 xsd:base64binary 的 SOAP 发送到 Web 服务。用户拍一张照片,带数据的字节数组在发送之前转换为base64,这样发送:

String img;
....
@Override
public void onPictureTaken(byte[] data, Camera camera) {
img = Base64.encodeToString(data, Base64.NO_WRAP);
}

在服务器端,php 将 img 字符串存储在 mysql BLOB 列中。

当另一个用户请求图片时,服务器从 stdClass 中的 mysql 中检索数据,不仅是图像,还有 id、所有者等...并使用 php 函数 json_encode 将所有这些数据封装成一个 JSON 字符串. WSDL 文件中的返回类型是 xsd:string。回到 Android,我所做的是:

JSONArray array = new JSONArray(response);
JSONObject row;
String imgStr;
byte[] img;

for (int i = 0; i < array.length(); i++) {
row = array.getJSONObject(i);
...
imgStr = row.getString("image");
...
}

if (!TextUtils.isEmpty(imgStr)) {
img = Base64.decode(imgStr, Base64.NO_WRAP);
}

//Insert byte[] in android SQLite
dao.insert(id, owner, img);

SQLite 中的表列类型也是 BLOB。当我从 SQLite 获取图像并尝试将其转换为 Bitmap 对象时,问题就出现了。代码:

...
byte[] img = cursor.getBlob(cursor.getColumnIndex(DB.M_IMG));
Bitmap bmp = BitmapFactory.decodeByteArray(img, 0, img.length);
...

img 字节数组似乎没问题,但 bmp 始终为 null...

我做过的一些测试是在图像所有者设备上获取 base64 字符串,然后将其发送并将其传递给位图并取得良好结果,这就是为什么我认为我的问题与编码或通过 json 或添加字符有关php,我不知道...

更新:如果我对 mysql 数据库中的 base64 字符串进行硬编码,则不会创建位图,如果我对拍照时生成的 base64 字符串执行相同的操作,那么它就可以工作。

我做错了什么?

最佳答案

在解决这个问题几天后,我找到了答案,这是一个 MySQL 问题。

显然 MySQL BLOB 类型最多只能存储 64Kb(找到错误的线索是所有图像都占用相同的 64Kb 空间......答案一直在那里,但我看不到它...... .).因此,就我而言,解决方案一直在通过 LONGBLOB 更改 MySQL 中的 BLOB 类型...

谢谢大家的宝贵时间。

关于php - 从 Android 中的 Web 服务恢复 base64 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16445182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com