java截图
public class ScheenShot {
public static void main(String[] args) throws Exception {
String screenFilePath = System.getProperty("user.dir") + File.separator +"shot01.png";
File file = new File(screenFilePath);
// shot(file, "png", 100,100,200,200);
shot(file, "png");
}
/**
* 截取整个屏幕
*/
public static void shot(File file, String suffix) throws Exception {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle screenRectangle = new Rectangle(screenSize);
BufferedImage screenShotImage = new Robot().createScreenCapture(screenRectangle);
if (!file.exists()){
file.createNewFile();
}
ImageIO.write(screenShotImage, suffix, file);
}
/**
* 截取某个区域
*/
public static void shot(File file, String suffix, int x, int y, int width, int height) throws Exception {
Rectangle screenRectangle = new Rectangle(x, y, width, height);
BufferedImage screenShotImage = new Robot().createScreenCapture(screenRectangle);
if (!file.exists()){
file.createNewFile();
}
ImageIO.write(screenShotImage, suffix, file);
}
js截图(不兼容ie)
function screenshotHandler(obj) {
var shotButton = document.createElement('a'); // 创建一个a节点插入的document
var event = new MouseEvent('click') // 模拟鼠标click点击事件
shotButton.download = Date.parse(new Date()) + ".jpg"; // 设置a节点的download属性值
if (obj['base64'] == "data:,"){
bootstrapAlert("视频不存在")
}else{
shotButton.href = obj['base64']; // 将图片的src赋值给a节点的href
shotButton.dispatchEvent(event) // 触发鼠标点击事件
SaveAs5(obj['base64']);
}
}
但是后来还是要求兼容ie,改成window.open()请求
function screenshotHandler(obj) {
if (obj['base64'] == "data:,"){
bootstrapAlert("视频不存在")
}else{
openWindowWithPost("/api/flight/video", "_blank", "base64Img", obj['base64']);
}
}
function openWindowWithPost(url,name,keys,values)
{
var newWindow = window.open(url, name);
if (!newWindow)
return false;
var html = "";
html += "<html><head></head><body><form method='post' id='formid' action='" + url + "'>";
if (keys && values)
{
html += "<input type='hidden' name='" + keys + "' value='" + values + "'/>";
}
html += "</form><script type='text/javascript'>document.getElementById('formid').submit();";
html += "<\/script></body></html>".toString().replace(/^.+?\*|\\(?=\/)|\*.+?$/gi, "");
newWindow.document.write(html);
return newWindow;
}
java里面的代码
/**
* 下载截图
*/
@PostMapping("")
public ResponseEntity<byte[]> saveImg(ScreenShot screenShot) throws IOException {
byte[] bytes = service.toArray(screenShot);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", new Date().getTime() + ".jpeg");
return new ResponseEntity<byte[]>(bytes, headers, HttpStatus.OK);
}
/**
* 在新窗口展示截图
*/
@PostMapping("")
public void test(@RequestBody ScreenShot screenShot, HttpServletResponse response) throws IOException {
byte[] bytes = service.toArray(screenShot);
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
response.setHeader("Content-Type", "image/jpeg");
BufferedImage image = ImageIO.read(in);
ImageIO.write(image, "jpg", response.getOutputStream());
}
//把base64位字符串改为byte数组
public byte[] toArray(ScreenShot screenShot) throws IOException {
String base64Img = screenShot.getBase64Img();
base64Img = base64Img.substring(base64Img.indexOf(",") + 1);
BASE64Decoder decoder = new BASE64Decoder();
byte[] b = decoder.decodeBuffer(base64Img);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
return b;
}
注意一下,由于base64位图片有前缀,一般图片base64开头都是data:image/png;base64,或者data:image/jpeg;base64,
要么22,要么23