Java實(shí)現(xiàn)屏幕截圖及剪裁
Java標(biāo)準(zhǔn)API中有個(gè)Robot類,該類可以實(shí)現(xiàn)屏幕截圖,模擬鼠標(biāo)鍵盤操作這些功能。這里只展示其屏幕截圖。
截圖的關(guān)鍵方法createScreenCapture(Rectangle rect) ,該方法需要一個(gè)Rectangle對象,Rectangle就是定義屏幕的一塊矩形區(qū)域,構(gòu)造Rectangle也相當(dāng)容易:
new Rectangle(int x, int y, int width, int height),四個(gè)參數(shù)分別是矩形左上角x坐標(biāo),矩形左上角y坐標(biāo),矩形寬度,矩形高度。截圖方法返回BufferedImage對象,示例代碼:
/**
* 指定屏幕區(qū)域截圖,返回截圖的BufferedImage對象
* @param x
* @param y
* @param width
* @param height
* @return
*/
public BufferedImage getScreenShot(int x, int y, int width, int height) {
BufferedImage bfImage = null;
try {
Robot robot = new Robot();
bfImage = robot.createScreenCapture(new Rectangle(x, y, width, height));
} catch (AWTException e) {
e.printStackTrace();
}
return bfImage;
}
如果需要把截圖保持為文件,使用ImageIO.write(RenderedImage im, String formatName, File output) ,示例代碼:
/**
* 指定屏幕區(qū)域截圖,保存到指定目錄
* @param x
* @param y
* @param width
* @param height
* @param savePath - 文件保存路徑
* @param fileName - 文件保存名稱
* @param format - 文件格式
*/
public void screenShotAsFile(int x, int y, int width, int height, String savePath, String fileName, String format) {
try {
Robot robot = new Robot();
BufferedImage bfImage = robot.createScreenCapture(new Rectangle(x, y, width, height));
File path = new File(savePath);
File file = new File(path, fileName+ "." + format);
ImageIO.write(bfImage, format, file);
} catch (AWTException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
捕捉屏幕截圖后,也許,我們需要對其剪裁。主要涉及兩個(gè)類CropImageFilter和FilteredImageSource,關(guān)于這兩個(gè)類的介紹,看java文檔把。
/**
* BufferedImage圖片剪裁
* @param srcBfImg - 被剪裁的BufferedImage
* @param x - 左上角剪裁點(diǎn)X坐標(biāo)
* @param y - 左上角剪裁點(diǎn)Y坐標(biāo)
* @param width - 剪裁出的圖片的寬度
* @param height - 剪裁出的圖片的高度
* @return 剪裁得到的BufferedImage
*/
public BufferedImage cutBufferedImage(BufferedImage srcBfImg, int x, int y, int width, int height) {
BufferedImage cutedImage = null;
CropImageFilter cropFilter = new CropImageFilter(x, y, width, height);
Image img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(srcBfImg.getSource(), cropFilter));
cutedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = cutedImage.getGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
return cutedImage;
}
如果剪裁后需要保存剪裁得到的文件,使用ImageIO.write,參考上面把截圖保持為文件的代碼。
- java利用phantomjs進(jìn)行截圖實(shí)例教程
- java實(shí)現(xiàn)pdf文件截圖的方法【附PDFRenderer.jar下載】
- Java實(shí)現(xiàn)對視頻進(jìn)行截圖的方法【附ffmpeg下載】
- spring(java,js,html) 截圖上傳圖片實(shí)例詳解
- java編程實(shí)現(xiàn)屏幕截圖(截屏)代碼總結(jié)
- Java模擬QQ桌面截圖功能實(shí)現(xiàn)方法
- java實(shí)現(xiàn)區(qū)域內(nèi)屏幕截圖示例
- java代碼實(shí)現(xiàn)截圖功能(屏幕截圖)
- 使用Java實(shí)現(xiàn)系統(tǒng)托盤功能的介紹(附源碼以及截圖)
- java實(shí)現(xiàn)攝像頭截圖功能
相關(guān)文章
實(shí)例解析Java設(shè)計(jì)模式編程中的適配器模式使用
適配器模式的主要作用是在新接口和老接口之間進(jìn)行適配,通過將一個(gè)類的接口轉(zhuǎn)換成客戶期望的另一個(gè)接口,讓原本不兼容的接口可以合作無間,本文以實(shí)例解析Java設(shè)計(jì)模式編程中的適配器模式使用,需要的朋友可以參考下2016-05-05
SpringBoot采用AJAX實(shí)現(xiàn)異步發(fā)布帖子詳解
Ajax是一種web應(yīng)用技術(shù),可以借助客戶端腳本(javascript)與服務(wù)端應(yīng)用進(jìn)行異步通訊,獲取服務(wù)端數(shù)據(jù)以后,可以進(jìn)行局部刷新,進(jìn)而提高數(shù)據(jù)的響應(yīng)和渲染速度。所有的Ajax請求都會基于DOM(HTML元素)事件,通過XHR(XMLHttpRequest)對象實(shí)現(xiàn)與服務(wù)端異步通訊局部更新2022-08-08
基于JWT實(shí)現(xiàn)SSO單點(diǎn)登錄流程圖解
這篇文章主要介紹了基于JWT實(shí)現(xiàn)SSO單點(diǎn)登錄流程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
常用校驗(yàn)注解之@NotNull,@NotBlank,@NotEmpty的區(qū)別及說明
這篇文章主要介紹了常用校驗(yàn)注解之@NotNull,@NotBlank,@NotEmpty的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
java 中設(shè)計(jì)模式(裝飾設(shè)計(jì)模式)的實(shí)例詳解
這篇文章主要介紹了java 中設(shè)計(jì)模式(裝飾設(shè)計(jì)模式)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09
Spring中基于Java的配置@Configuration和@Bean用法詳解
這篇文章主要介紹了Spring中基于Java的配置@Configuration和@Bean用法詳解,Spring中為了減少xml中配置,可以聲明一個(gè)配置類(例如SpringConfig)來對bean進(jìn)行配置。,需要的朋友可以參考下2019-06-06

