如何识别arraybuffer是字符串还是图像?

时间:2014-09-15 05:41:33

标签: javascript image blob arraybuffer

我们使用websocket以bytearray传输数据。在接收端,javascript必须确定收到的ArrayBuffer是String类型还是Image类型。如果是String,则转换为String,否则转换为Blob。如下所示,除了我不知道如何识别arraybuffer是字符串或图像。

if (message instanceof ArrayBuffer) {
         if(message of type string)
         var bytearray = new Uint8Array(message);
         to convert to string
        var out = String.fromCharCode.apply(null, bytearray);
        console.log(out);
     }
       if(message of type image){
        imageId.height = 400;
        imageId.width = 600;
        imageId.src = convertArrayBufferBlobUrl(message);
      }

更新

从服务器我将发送图像作为以下java代码。如何在字节数组中追加或添加标志以通过客户端浏览器(javascript)识别为图像或字符串?

ImageIO.write(getSubImage(bufferedImage,width,height),“png”,baos); byte [] result = baos.toByteArray();

1 个答案:

答案 0 :(得分:2)

有两种方法。例如,如果您使用的是JPEG文件类型,则可以通过它的一般特征识别JPEG格式:

http://www.fileformat.info/format/jpeg/corion.htm

How to identify contents of a byte[] is a jpeg?

现在,这是一种有效的方法,但你必须为每种图像类型编写一个,这很乏味。

现在这个:How to check if a byte array is a valid image?也可以使用,是另一个有效的答案,但是会遇到将数据转换为图像的开销。

@dandavis建议的一个好选择是使用一些元数据,如服务器端的标志。

例如:

if(<data is image>)
     result=json_encode(array[flag,data])

并将结果发送回客户端。标志可能对图像说'是',对于字符串可以说'不',或者1和0或任何你觉得有吸引力的对。

<强>更新 看看这个

import net.sf.json.JSONArray;

ImageIO.write(getSubImage(bufferedImage,width,height), "png", baos );
byte[] result=baos.toByteArray();

JSONObject obj = new JSONObject();

obj.put("imgFlag","true");
obj.put("imgData", result);

但是,放置字节数组本身可能并不容易。 我的建议是尝试将字节数组作为json值,但是如果它不起作用,首先将字节数组result转换为base64字符串,如下所示:Put byte array to JSON and vice versa

......并做同样的事。

您可以通过将obj转换为JSON字符串来发送数据。

String jsonData=obj.toString();

并发送jsonData作为响应数据。