11

我组装了一个小型测试网络应用程序,它将 HTML 画布转换为图像(通过使用 Nihilogic 的canvas2image JavaScript 库),然后用生成的图像替换画布并显示一条消息,通知用户触摸(长)该图像以便将其保存到他们的手机中。

我遇到的问题是 Android 的默认 Web 浏览器(“Internet”)不会呈现代表图像的 base64 编码数据流,而是显示一个问号符号。有没有办法解决这个问题?如果是,那么如何?

4

2 回答 2

4

使用自定义 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();
            }
        }
    }
}
于 2012-09-06T04:21:04.723 回答
1

基于@goldenparrot 图像的评论可以看到

<img src="data:image/png;base64,BASE64_STRING_HERE" />

(以及建议的 css 背景图像)当加载页面时已经存在 base64 数据时。但是,当动态输入完全相同的数据字符串时,由于某种原因,它不起作用。即使是带有 base64 数据的静态加载图像也存在问题:它不会以任何方式对长按做出反应,因此无法下载。我使用的是安卓 2.3.6。

编辑:您也可以尝试添加额外的下载链接

<a href="data:application/octet-stream;base64,BASE64_STRING_HERE">download file</a>

但这对我不起作用。Android 只是将该文件的内容显示为文本。普通桌面网络浏览器确实打开了“下载文件”对话框,但没有建议该文件的任何扩展名,因此用户必须手动添加它。

另请参阅浏览器/HTML 强制从 src="data:image/jpeg;base64..." 下载图像

我的测试 html 页面是http://kuitsi.bitbucket.org/stackoverflow12113616.html

于 2012-09-06T10:29:36.593 回答