【问题标题】:Sending Images via JSON using base64 Encoding使用 base64 编码通过 JSON 发送图像
【发布时间】:2016-08-12 00:58:51
【问题描述】:

我正在测试是否可以发送带有一两个图像的 JSON 文件。目前,我已将图像转换为字节并使用

Base64.encodeToString(temp_arr, Base64.NO_WRAP);

(这是Android的base64类,我必须在读取其他堆栈溢出页面后使用.NO_WRAP功能才能使其工作)

将其转换为字符串。此时,我将该字符串对象传递到我的 JSON 文件(使用 GSON 库)并添加字符串 go it。此数据将被发送到 PHP 页面。

我已经测试将字节转换为 base64 并保存到一个文本文件,将该文本文件复制到我的 php 页面中,使用

通过我的 php 页面运行它
 base64_decode($);

并且能够正确地重新创建图像(sha 哈希匹配)。所以现在我需要测试它通过网络发送它并使用 json。唯一的区别是base64字符串被放入其他json文件而不是文本文件,json被发送到php,我抓取数据并在PHP中解码。

现在的问题是图像已损坏,在十六进制编辑器中查看两个文件,十六进制编辑器中的前 20 行左右匹配正常,但之后不匹配。奇怪的是,文件的最后有相同的数据,只是上传的副本有额外的字符,使其尺寸更大。

所以我的问题是试图找出,是 GSON (JSON) 导致问题还是其他原因,如果是,我该怎么办。

可悲的是,我的工作方式是,我的老板需要将数据(带有文本、数据等的 json)同时发送到与图像相同的 php 页面,这就是我通过 json 发送图像的原因.

【问题讨论】:

    标签: java php android json gson


    【解决方案1】:

    帮我试试这个工作,把图片转换成base64

     public static String getStringImage(Bitmap bmp)
        {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.JPEG, 60, baos);
            byte[] imageBytes = baos.toByteArray();
            String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
            Log.e("SignUp", "Image Decode : " + encodedImage);
            String asa = encodedImage;
            return encodedImage;
        }
    

    //传递位图图像并返回base64字符串

    【讨论】:

    • 不幸的是,我不能这样做。图像以 Uri 形式出现。整个过程是通过使用相机拍照获取 Uri,然后将 Uri 链接到使用输入和输出流写入的文件对象。但不包括来自输入流的所有字节。哪个有效但不适用于.json。另一件事是我们不能使用位图 r.bitmapcompress。因为压缩会丢失图像 exif 元数据:(
    【解决方案2】:

    我相信我找到了我的解决方案,问题是 Base64.encodeToString() 会将图像字节编码为包含“+”的字符,在 PHP 端,数据将被发送,除了所有“+”变成空格.我只需要用 + 替换所有空格即可。

    【讨论】:

      猜你喜欢
      • 2020-11-23
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多