在Android浏览器中将图像渲染为数据流
Render Image as Data stream in Android browser
我制作了一个小型的测试web应用程序,它将HTML画布转换为图像(通过使用Nihilogic的canvas2imageJavaScript库),然后用生成的图像替换画布,并显示一条消息,通知用户触摸(长)该图像以便将其保存到手机中。
我遇到的问题是,Android的默认网络浏览器("Internet")不会呈现代表图像的base64编码数据流,而是显示一个问号。有办法解决这个问题吗?如果是,那么怎么做?
使用自定义ContentProvider并覆盖openFile()以Tempfile形式返回流。
您可以将URI用作html A标记中的src。
<a src="Example://file"></a>
public class ExampleProvider extends ContentProvider {
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
//Get your bitmap
Bitmap bmp = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.file_example);
File tempFile = null;
try {
//Create the tempfile form a stream
tempFile = File.createTempFile("tempfile", ".thumb", getContext().getCacheDir());
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(tempFile));
bmp.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.close();
if(mode.equals("r")) {
return ParcelFileDescriptor.open(tempFile, ParcelFileDescriptor.MODE_READ_ONLY);
}
}
catch(IOException e) {
LOGGER.error("Couldn't generate temp file for thumb view, guid:" + guid, e);
}
finally {
if(tempFile != null {
//The unix filesystem automatically deletes the file once all handles are gone
tempFile.delete();
}
}
}
}
根据@goldenparot的评论,可以用看到图像
<img src="data:image/png;base64,BASE64_STRING_HERE" />
当页面加载时base64数据已经存在时,(以及建议的css背景图像)。然而,由于某些原因,当完全相同的数据字符串被动态输入时,它不起作用。即使是带有base64数据的静态加载图像也存在问题:它对长时间点击没有任何反应,因此无法下载。我使用的是安卓2.3.6。
编辑:您也可以尝试添加额外的下载链接
<a href="data:application/octet-stream;base64,BASE64_STRING_HERE">download file</a>
但它对我不起作用。Android只是将该文件的内容显示为文本。普通的桌面web浏览器确实打开了"下载文件"对话框,但并没有建议该文件的任何扩展名,所以用户必须手动添加。
另请参见Browser/HTML强制从src下载图像=";数据:图像/jpeg;base64…";
我的测试html页面是http://kuitsi.bitbucket.org/stackoverflow12113616.html
相关文章:
- 画布数据到图像
- 在Android浏览器中将图像渲染为数据流
- 将普通数据转换为xml数据的图像滑块
- 将带有自定义数据的图像上载到服务器
- 使用javascript/jQuery用JSON数据更改图像源
- 如何将视频数据流式传输到视频元素
- PubNub Twitter数据流中的文本过滤
- 确认框包含使用 JavaScript 的数据和图像
- 抽搐流图像并仅在在线流上排序
- 从 asp.net c# 中的网页获取所有数据(包括图像)
- JavaScript:数据流压缩/解压缩
- 通过 DIV 数据打开图像
- 使用 pako 解码压缩的数据流
- Java客户端卡在来自nodejs服务器的数据数据流中
- 如何将网络摄像头数据流式传输到服务器
- 如何将数据流流入节点服务器以填充人力图
- 如何从 Web API 发布和获取数据 uri 图像
- 使用数据库中的数据调用图像,并将其用作传单中的标记图像
- 根据文本框中输入的数据调整图像大小
- 使用 ImageMagick 渲染织物.js画布 json 数据到图像文件