2015-09-25 371 views
2

在Java中使用编码为base64字符串的网络中的图像工作。我只在img src标签中看过image/png格式,例如data:image/png;base64,{eNc0d3d_St!ng...}我还没有看到image/gif或image/jpg。我已经看过,并在base64编码上读了一点。是data:image/png; base64是img标签唯一的base64编码?

此外,我在做 Base64.decode(src, Base64.DEFAULT)时脱离了Java(Android)中的data:image/png;base64部分,所以看起来在这种情况下没有必要使用png。事实上,如果我不剥掉这个“标题”,那么BitmapFactory.decodeByteArray返回null。

所以问题是,除了PNG以外的其他格式的图像编码在网络上?

+0

大部分图像(或其他二进制)文件格式,如PNG,GIF或JPEG格式,包含了(“魔术”)在文件开头的标识符,唯一标识格式。在这种情况下,'image/png'部分是多余的,但对于可以使用数据URI方案表示的所有可能的格式来说,情况可能并非如此。所以它确实有一个目的。另外,请记住'; base64'部分我*可选*,不要盲目地将数据发送到Base64解码器。 – haraldK

+0

感谢您的评论,这回答了我对这个主题的一些相关问题。并且还会生成一些新的。 :) –

回答

1

是的,他们是:

数据:图像/ GIF

数据:图像/ JPG

等等

,而不是只针对图片:

data:text/html

Th Ë格式是如下

data:[<media type>][;charset=<character set>][;base64],<data> 

硒这里 https://en.wikipedia.org/wiki/Data_URI_scheme

http://dataurl.net/#about

+0

http://dataurl.net/#about列表图像/ gif,谢谢。 Wiki列表图像/ png –

0

没有,你可以使用gifjpg或任何类型的图像浏览器读取。例如:

<img width="16" height="16" alt="star" src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" />

+0

也许这是最好的一个单独的问题,但是:如果我将上面的代码中的图像/ png更改为image/gif,我会得到相同的图像。我预计可能会出现一个损坏的图像,但似乎至少FF将其渲染为相同,无论声明的图像类型如何。 –

+0

对,一旦FF看到数据流是图像,它会查看“幻数”找出它是哪种图像类型。 –