我在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();
}
但是当我打开那张图片时,它看起来是空的。请帮忙。
答案 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