㈠ java截屏有哪幾種方法
前台方式
1. 利用html2canvas實現前台截屏
html2canvas項目的gitHub地址
html2canvas示例
html2canvas可以將HTML代碼塊進行截取,並生成快照形式的canvas,然後可以利用html5的下載功能提供圖片的下載介面,供用戶下載。
優點:前台技術,實現比較容易。
缺點:此項目使用了html5的技術,因此在對IE的兼容上,只可以在IE9+的版本上使用。
使用時,需要引用jQuery.js和html2canvas.js。(html2canvas.js可以在github上下載)
具體JavaScript代碼如下:
var canvas = function () {
html2canvas($("#chart"), {
onrendered: function (canvas) {
$("#class11").html(canvas);//將id為「class11」部分的代碼轉換為canvas
var type = 'png';//圖片類型為png
var imgData = canvas.toDataURL('png');//將圖片轉換為png類型的流
var _fixType = function (type) {
type = type.toLowerCase().replace(/jpg/i, 'jpeg'); var r = type.match(/png|jpeg|bmp|gif/)[0]; return 'image/' + r;
}; var saveFile = function (data, filename) {
var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
save_link.href = data;
save_link.download = filename; var event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
save_link.dispatchEvent(event);
}; //下載時的文件名
var filename = 'fe_' + (new Date()).getTime() + '.' + type; // 下載文件
saveFile(imgData, filename);
}
});
後台方式(java)
1. 利用html2image實現
html2image的地址(google)
html2image是可以識別html標簽並將html轉換成圖片的java項目。
優點:後台轉換,故對瀏覽器的版本基本沒有要求。
缺點:對樣式的識別不是很好,轉換出來的圖片比較簡單,基本沒有可以兼容的樣式。
使用方式:maven中引用如下依賴:
<dependency>
<groupId>com.github.xuwei-k</groupId>
<artifactId>html2image</artifactId>
<version>0.1.0</version></dependency>12345
2. 利用DJNativeSwing項目實現
純java代碼實現。使用DJNativeSwing這個項目,構建一個swing瀏覽器,打開網址,之後截取圖片。(需要eclipse的swt庫支持)
優點:純java實現。
缺點:需要多線程的支持,只在控制台方式實現過(由於本人對於多線程的掌握較弱,目前沒有在spring項目中實現這個方法,求大神指導~~)
3. 利用phantomJs實現
phantomJs的GitHub地址
phantomJs官網
phantom利用的是webKit內核,全面支持web而不需瀏覽器支持,快速,原生支持各種Web標准。
優點:速度快,使用簡單。
缺點:需要在項目的伺服器端引用exe文件進行截圖,並發性能有待考證。
㈡ 如何以Java實現網頁截圖技術
使用JavaFX8(JDK8打包在一起)
public void start(Stage primaryStage) throws Exception {
final WebView view = new WebView();
Scene scene = new Scene(view, 310, 310);
primaryStage.setScene(scene);
final WebEngine webEngine = view.getEngine();
webEngine.load(this.getClass().getResource("web/index.html")
.toExternalForm());
primaryStage.show();
// 方式1. 監聽webEngine載入進度,可能頁面載入不完整
webEngine.getLoadWorker().stateProperty()
.addListener(new ChangeListener<State>() {
@Override
public void changed(ObservableValue<? extends State> ov,
State oldState, State newState) {
if (newState == State.SUCCEEDED) {
snapshot(view);
}
}
});
// 方式2. 使用Transition設定延時
PauseTransition ptr = new PauseTransition(Duration.seconds(3));
ptr.setOnFinished(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
snapshot(view);
}
});
ptr.play();
//方式3. 使用Task設定延時
Task<String> task = new Task<String>() {
@Override
protected String call() throws Exception {
Thread.sleep(5000);
return null;
}
};
task.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
snapshot(view);
}
});
new Thread(task).start();
// 方式4. 自己實現多線程調用,較麻煩
new Thread(){
public void run() {
try {
Thread.sleep(7000);//該命令不可直接在Fx用戶線程執行,否則會導致前台的渲染線程暫停,頁面不會被載入
Platform.runLater(new Runnable() {
@Override
public void run() {
snapshot(view);//在後台線程中不可以直接操作UI,需要藉助runLater
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();
}
public void snapshot(Node view) {
Image image = view.snapshot(null, null);
try {
ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png",
new File("f:\" + System.currentTimeMillis() + ".png"));
} catch (IOException e) {
e.printStackTrace();
}
}
㈢ 求以下截圖的java-web代碼,急!!!!!!!!!!!
我將一樓的代碼改進一下。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>用戶信息</title>
<style type="text/css">
.border{margin-top: 20px;
margin-left: 160px;}
.table-uer-info{border:1px solid #F6F;border-collapse:collapse;font:12px Arial, Helvetica, sans-
serif,"宋體";}
.table-uer-info th{line-height:25px;background:#F6F;}
.table-uer-info td{border-top:1px #fff solid;border-right:1px #fff
solid;background:#F7F7F7;padding:6px;line-height:28px;vertical-align:middle;}
</style>
</head>
<body>
<div class="border">
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<table width="80%" border="0" class="table-uer-info">
<tr>
<th colspan="2">用戶信息</th>
</tr>
<tr>
<td><label for="textfield">用戶名:</label>
<input type="text" name="textfield" id="textfield" /></td>
<td><label>密碼:
<input type="text" name="textfield2" id="textfield2" /></label></td>
</tr>
<tr>
<td>性別:
<label for="radio"><input type="radio" name="radio" id="radio" value="radio" />
男 </label>
<label> <input type="radio" name="radio" id="radio2" value="radio2" />
女</label></td>
<td>省份:
<select name="select" id="select">
<option>上海</option>
</select></td>
</tr>
<tr>
<td>電話:
<input type="text" name="textfield5" id="textfield5" /></td>
<td>地址:
<input type="text" name="textfield3" id="textfield3" /></td>
</tr>
<tr>
<td>E-mail:
<input type="text" name="textfield6" id="textfield6" /></td>
<td>上傳:
<label for="fileField"></label>
<input type="file" name="fileField" id="fileField" /></td>
</tr>
<tr>
<td colspan="2">愛好:
<label for="checkbox"><input type="checkbox" name="checkbox" id="checkbox" />
讀書</label>
<label> <input type="checkbox" name="checkbox2" id="checkbox2" />
上網</label>
<label for="checkbox3"><input type="checkbox" name="checkbox3" id="checkbox3" />
游戲</label>
<label for="checkbox4"><input type="checkbox" name="checkbox4" id="checkbox4" />
旅遊</label></td>
</tr>
<tr>
<td colspan="2">個人介紹
<label for="textarea"></label>
<textarea name="textarea" id="textarea" cols="45" rows="5"></textarea></td>
</tr>
<tr>
<td align="right"><input type="submit" name="button" id="button" value="提交"
/></td>
<td><input type="reset" name="button2" id="button2" value="重置" /></td>
</tr>
</table>
</form>
</div>
</body>
</html>
㈣ javaweb如何防止windows下用戶使用prtsc sysrq鍵截屏
純JAVA 做不到,WEB中更不行,,,,,,必須native程序
㈤ Appium+Java自動化測試 android混合APP的webview頁面截圖怎麼截
先切回原生頁面在進行截圖
Drivername.context("NATIVE_APP");
㈥ 求助:java web開發實現截圖,客戶機截取本機圖片,上傳到伺服器
要想客戶端截圖,除非開發一個插件,並且客戶端要安裝才行
否則隨便打開一個網頁都能截圖的話那就是病毒了,你也不想隨便打開一個網頁就把你屏幕上的內容截圖發到網站吧,呵呵
㈦ 如何用java實現web工程中整個屏幕的截圖
第一種
如果你想對用戶的每個操作都要記錄起來的話方便用戶查看可以採用RTMP協議實時對SWF繪制Bitmap進行錄像,缺點就是你不方便對用戶具體的操作位置進行高亮顯示,只是錄制了純粹的視頻
第二種
在具體操作的地方進行自定義事件,針對需要記錄的地方進行監聽,每次用戶點擊某一個地方就繪制Bitmap並對點擊位置進行高亮顯示,然後再把圖片存起來後最後進行合並;缺點就是太多的地方需要加上此事件-比較繁瑣.
㈧ java 怎麼實現網頁截圖
事實上,如果您想以Java實現網頁截圖,也就是「輸入一段網址,幾秒鍾過後就能截取一張網頁縮略圖」的效果。那麼,您至少有3種方式可以選擇。
1、最直接的方式——使用Robot
方法詳解:該方法利用Robat提供的強大桌面操作能力,硬性調用瀏覽器打開指定網頁,並將網頁信息保存到本地。
優勢:簡單易用,不需要任何第三方插件。
缺點:不能同時處理大量數據,技術含量過低,屬於應急型技巧。
實現方法:使用如下代碼即可。
[java]viewplain
publicstaticvoidmain(String[]args)throwsMalformedURLException,
IOException,URISyntaxException,AWTException{
//此方法僅適用於JdK1.6及以上版本
Desktop.getDesktop().browse(
newURL("http://google.com/intl/en/").toURI());
Robotrobot=newRobot();
robot.delay(10000);
Dimensiond=newDimension(Toolkit.getDefaultToolkit().getScreenSize());
intwidth=(int)d.getWidth();
intheight=(int)d.getHeight();
//最大化瀏覽器
robot.keyRelease(KeyEvent.VK_F11);
robot.delay(2000);
Imageimage=robot.createScreenCapture(newRectangle(0,0,width,
height));
BufferedImagebi=newBufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);
Graphicsg=bi.createGraphics();
g.drawImage(image,0,0,width,height,null);
//保存圖片
ImageIO.write(bi,"jpg",newFile("google.jpg"));
}
2、最常規的方式——利用JNI,調用第三方C/C++組件
方法詳解:目前來講,Java領域對於網頁截圖組件的開發明顯不足(商機?),當您需要完成此種操作時,算得上碰到了Java的軟肋。但是,眾所周知Java也擁有強大的JNI能力,可以輕易將C/C++開發的同類組件引為己用。不懂可以扣五七八零二四一四四
優勢:實現簡單,只需要封裝對應的DLL文件,就可以讓Java實現同類功能。
劣勢:同其他JNI實現一樣,在跨平台時存在隱患,而且您的程序將不再屬於純Java應用。
實現方法:可參見此用例,具體封裝何種C/C++組件請自行選擇。
PS:示例來源於ACA HTML to Image Converter項目(http://www.acasystems.com/en/web-thumb-activex/faq-convert-html-to-image-in-java.htm ),這是一個收費的HTML轉Image第三方組件,但封裝方式在Java中大同小異。
引用JNI封裝:
[java]viewplain
importsun.awt.*;
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.awt.*;
importjava.awt.peer.*;
publicclassSnap
{
static
{
System.loadLibrary("Snap");
}
publicstaticvoidmain(String[]argv)
{
Snapt_xSnap=newSnap();
t_xSnap.Start("http://www.google.com","snapshot-google.png");
}
publicnativevoidStart(Stringpi_strURL,Stringpi_strImageName);
}
CPP部分的實現:
[java]viewplain
#include<windows.h>
#include<atlbase.h>
#include"snap.h"
#pragmacomment(lib,"atl.lib")
#import"./../../acawebthumb.dll"no_namespace
JNIEXPORTvoidJNICALLJava_Snap_Start(JNIEnv*pEnv,jobject,jstringpi_strUrl,jstringpi_strFileName)
{
CoInitialize(0);
_bstr_tt_strUrl=pEnv->GetStringUTFChars(pi_strUrl,0);
_bstr_tt_strFileName=pEnv->GetStringUTFChars(pi_strFileName,0);
IThumbMakerPtrHTML_Converter=NULL;
HRESULThr=HTML_Converter.CreateInstance(L"ACAWebThumb.ThumbMaker");
if(SUCCEEDED(hr))
{
HTML_Converter->SetURL(t_strUrl);
if(0==HTML_Converter->StartSnap())
HTML_Converter->SaveImage(t_strFileName);
}
if(HTML_Converter)
HTML_Converter.Release();
CoUninitialize();
}
以該組件圖像化yahoo界面的效果圖:
3、最扎實的方法——自行解析HTML標記,並將其圖像化
方法詳解:眾所周知,HTML之所以在瀏覽器中以具體的網頁格式出現,並非伺服器端傳了一整個應用到客戶端,而是源自於瀏覽器對於客戶端自行解析的結果。因此,只要我們將對應的解析一一實現,那麼將網頁圖形化,就將不是什麼難事。
優勢:純Java實現,一勞永逸,一旦開發完成則永遠通用,而且有一定的商用價值。
劣勢:開發費時,且需要針對不同語法做精確分析,才能保證輸出的基本正確。尤其在涉及到JavaScript解析時,難度將尤其增大。
實現方法:目前尚無具體案例可供參考。但是,由於Java有jdic之類的瀏覽器項目存在(https://jdic.dev.java.net/),而Java圖形界面又屬繪制生成。從理論上說,我們可以將所有具備Graphics的組件圖形化保存。
而如果自行解析,那麼您需要建立HTML解析器(或使用第三方的,萬幸Java在這方面的組件很多),了解Java2D機制,了解何時該使用drawString繪制文字,何時又該使用drawImage插入圖片等等。
謝謝採納!
㈨ java web的面試需要帶電腦過去運行自己的作品么我是應屆畢業生。還是截圖列印出來好
畢業的那點作品別帶了,根本不算是成熟的項目,特別是web,如果是c/c++或者android/iphone那不一樣,web太雜了,你做出來的作品在工作半年的人眼裡都根本不入流,面試的時候人家只關心你的技術,這是經驗之談