【问题标题】:Get image from JSON String in JAVA从 JAVA 中的 JSON 字符串获取图像
【发布时间】:2012-12-04 18:09:45
【问题描述】:

我正在从 php 向 Java 发送 JSON 字符串,其中包含一些字符串类型数据和编码图像。在 jJva 中,inputStream 被转换为 BufferedReader 和 String。现在字符串看起来像{"name": "xxx", "image":agrewfefe...} 有没有办法将代表图像的字符串解码为位图,或者我必须在其他流中发送图像?

【问题讨论】:

  • 您不能安全地假设,如果您将图像转换为文本,它不会包含在 JSON 中被视为无效的字符(或破坏 JSON 语法的字符,例如 " 或 ' 或 : 或 , )。
  • 您的 (sorta) 片段不是一个有效的 JSON(必须引用字符串)。除此之外,@11684 上面所说的内容;您需要对图像进行 Base64 编码之类的操作,以避免破坏 JSON。
  • 你能解码 Base64吗? @BrianRoach
  • 嘿,今天学到了一些东西! @BrianRoach
  • @11684 - 这就是 Base64 编码/解码的全部意义;)这不是加密 - 它将二进制数据编码为可打印的文本格式。 (我猜你的第二条评论是你刚刚查到的:))

标签: java android


【解决方案1】:

如前所述,Base64 编码是可行的方法。但是不要手动执行此操作,只需使用 Jackson JSON library,它会自动 Base64 编码/解码二进制数据(任何声明为 byte[] 的内容)。所以像

public class Request {
  public String name;
  public byte[] image;
}

Request req = new ObjectMapper().readValue(new URL("http://my.service.com/getImage?id=123"),
  Request.class);

【讨论】:

  • 好电话。我实际上不知道杰克逊有这个功能。每天学习新东西。
【解决方案2】:

是的;你需要Base64 encode你的形象。

因此,您无法保证生成的字符是可打印的,或者它们不会破坏 JSON 格式。

有许多 Base64 编码/解码库。一个常用的包含在Apache commons (codec) library

这里有一个来自http://www.kodejava.org/examples/375.html的简单用法示例

import org.apache.commons.codec.binary.Base64;
import java.util.Arrays;

public class Base64Encode {
    public static void main(String[] args) {
        String hello = "Hello World";

        //
        // The encodeBase64 method take a byte[] as the paramater. The byte[] 
        // can be from a simple string like in this example or it can be from
        // an image file data.
        //
        byte[] encoded = Base64.encodeBase64(hello.getBytes());

        //
        // Print the encoded byte array
        //
        System.out.println(Arrays.toString(encoded));

        //
        // Print the encoded string
        //
        String encodedString = new String(encoded);
        System.out.println(hello + " = " + encodedString);
    }
}

在发送端,您将使用该编码字符串作为 JSON“图像”字段。另一方面,您将解析 JSON,然后将 Base64 字符串解码回图像。

编辑添加:只需重新阅读您的问题(我最初只注意到标签并错过了 PHP 部分) - 在 PHP 方面,您需要使用 base64_encode

http://php.net/manual/en/function.base64-encode.php

【讨论】:

    猜你喜欢
    • 2021-01-01
    • 2020-11-10
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    相关资源
    最近更新 更多