websocketapi-图像编码在客户端不产生任何图像类型
websocket api - image encoding yields no image type on client side
我在tomcat 8上有一个web套接字服务器,使用以下二进制:
sess.getBasicRemote().sendBinary(bf);
其中bf是一个简单的图像到字节的转换,如下所示:
BufferedImage img = ImageIO.read(...);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( img, "png", baos );
ByteBuffer bf = ByteBuffer.wrap(baos.toByteArray());
这段代码最终在客户端(javascript)中以blob的形式出现,并最终在浏览器中呈现为图像,这似乎运行得很好。唯一奇怪的是,图像被无类型渲染为:
数据:;base64,iVBORw0KGgoAAAA……==没有类型(image/png)
如果我对相同的图像使用在线编码器,我会得到:
数据:image/png;base64,iVBORw0KGgoAAAA……==(注意图片/png类型)
所以我的问题是为什么?我的图像到字节的转换错误吗?就像我说的,图像显示得很好,只是缺少类型。请注意,从java websocket服务器发送的数据不是用base64编码的,这是我在客户端做的事情(通过JS的FileReader.readAsDataURL(blob)-非常常见)。
非常感谢并对发布后的长时间感到抱歉
不,您的图像到字节数组的转换没有错。字节数组转换将图像视为二进制流,与其中包含的MediaType
无关。
您要查看的类型是数据URI媒体类型。用于将文件转换为字节数组的普通java代码不会为您提供符合data URL scheme
的URL。
来自RFC
数据:[lt;mediatype>][;base64],<中介类型>是Internet媒体类型规范(可选参数。)";;base64";意味着数据被编码为base64。没有";;base64";,数据(作为八位字节)使用ASCII编码来表示安全URL字符的范围,并使用标准的%xx十六进制编码位于该范围之外的八位字节的URL数。如果<中介类型>被省略,它默认为text/plain;charset=US-ASCII。作为简写,"text/plain";可以省略,但提供了charset参数。
RFC源
当您在Javascript中创建Blob
对象时,您可以选择将MediaType
传递给它,这样当您使用FileReader.readAsDataURL
读取它时,它就会填充适当的媒体类型。
示例位于下方
var blob = new Blob( [ arrayBufferView ], { type: "image/jpeg" } );
源
您的代码中可能不需要BufferedImage
,简单的文件读取就足够了。
以下是使用Apache FileUtils编写的等效代码。
ByteBuffer bf = ByteBuffer.wrap(FileUtils.readFileToByteArray('test.jpg'));
- 客户端图像调整大小.任何已知问题
- 有人知道有没有jquery插件可以在图像上写文本,并让用户将其放置在图像内的任何位置
- 如何通过ajax php将图像上传到服务器本地目录,其中html表单haven't任何传统的提交按钮
- 防止图像拖动,但其他任何内容
- 是从画布获取图像数据的任何方法,从远程视频中提取
- 提交输入类型=“;图像“;到另一个servlet时,未能返回任何参数
- websocketapi-图像编码在客户端不产生任何图像类型
- 有没有任何方法可以使用joomla为图像添加描述!模态挤压盒
- 是否有任何事件在浏览器请求另一个资源(如图像)之前触发
- 任何比较两个不同位图图像并在javascript中检测不同区域的方法
- 单击图像不执行任何操作
- 仅发布图像文件或允许不发布任何文件
- 我无法在我的网站上获取任何图像或显示任何 URL 图像
- 是否可以在不使用任何 severside 脚本语言的情况下将图像上传到服务器文件夹
- JavaScript:Canvas.drawImage 不显示任何图像
- 是否可以使用任何 PHP 仅使用 jQuery 上传图像
- 一种脚本,它从数组中随机加载图像,在查看完所有图像之前不重复任何图像
- Fancybox 加载,但不包含任何图像,即使我很确定图像在正确的位置
- Webshot不保存任何图像
- 如何验证只接受(任何)图像类型文件的表单