如何在Android中截取webview的截图

时间:2014-04-17 12:14:22

标签: android html5 canvas webview

我在webview中的html5画布上画了几行,并尝试使用下面的代码截取webview的截图...

WebView webView = (WebView) findViewById(R.id.webview);
webView.setDrawingCacheEnabled(true);
Bitmap screenshot = Bitmap.createBitmap(webView.getDrawingCache());
webView.setDrawingCacheEnabled(false);
File myFile = new File(Environment.getExternalStorageDirectory().getPath()+ "/myfolder");
if(!myFile.exists()) {
    myFile.mkdir();
}
imagePath = myFile.getAbsolutePath() + "/myimage001.png";
FileOutputStream fos = null;
try {
    fos = new FileOutputStream(imagePath);
    if ( fos != null ) {
        screenshot.compress(Bitmap.CompressFormat.PNG, 100, fos);
        fos.close();
    }
} catch( Exception e ) {
    e.printStackTrace();
}

但是当我打开那张图片时,它看起来是空的。请帮忙。

3 个答案:

答案 0 :(得分:2)

执行以下操作

private void TakeScreenshot()
{
 Picture picture = webview.capturePicture();
                    Bitmap  b = Bitmap.createBitmap( picture.getWidth(),
                    picture.getHeight(), Bitmap.Config.ARGB_8888);
                    Canvas c = new Canvas( b );

                    picture.draw( c );
                    FileOutputStream fos = null;
                    try {

                        fos = new FileOutputStream( "mnt/sdcard/yahoo.jpg" );
                            if ( fos != null )
                            {
                                b.compress(Bitmap.CompressFormat.JPEG, 100, fos);

                                fos.close();
                            }
                        }
                   catch( Exception e )
                   {

                   }
}

N.B:在WebView完成加载后截取屏幕截图,否则您将看到一个空白屏幕。

答案 1 :(得分:1)

我也发现直接从Android应用程序截取webview显示HTML5画布的截图真的不可靠。但有一种解决方法 -

您可以使用window.JSInterface。(params)从javascript调用android java函数。您可以使用canvas.toDataURL()来获取画布图像的base64编码字符串,并将其用作传递给函数的参数。在android函数中,捕获字符串,解码它,你就拥有了图像。

唯一需要注意的是,单独的画布区域将作为图像进入,而不是完整的设备屏幕。此外,如果画布没有背景颜色集,则捕获的png图像将具有透明背景。但是这些可以通过应用程序代码中的图像处理轻松解决。

E.g。在这个游戏应用程序中,游戏运行在webview中显示的HTML5画布中。当游戏结束时,“共享得分”选项使用上述技术捕获要共享的画布图像。 https://play.google.com/store/apps/details?id=com.skipser.flappytrex

答案 2 :(得分:0)

捕获屏幕截图:

File srcFile= driver.getScreenshotAs(OutputType.FILE);
String filename = UUID.randomUUID().toString();
File targetFile = new File("D:\\Appium\\" + filename + ".png");
FileUtils.copyFile(srcFile, targetFile);
System.out.println(targetFile);enter code here