Java使用html2image將html生成縮略圖圖片的實(shí)現(xiàn)示例
POM文件添加Maven依賴
<dependency> <groupId>gui.ava</groupId> <artifactId>html2image</artifactId> <version>0.9</version> </dependency>
主要代碼:
String coverPath = null; try { HtmlImageGenerator imageGenerator = new HtmlImageGenerator(); imageGenerator.loadHtml(lzDocs.getContent());//也可以根據(jù)html url引用 loadUrl的方式加載 Thread.sleep(1000); //有時(shí)會(huì)有加載圖片延遲,因此這里設(shè)置下延時(shí) BufferedImage cover = imageGenerator.getBufferedImage();//獲取圖片 cover = ImageUtils.getCoverImage(cover);//將圖片轉(zhuǎn)成綜略圖 String coverName = UUIDGenerator.generate().toString() + ".png"; MultipartFile mpFile = FileUtils.imageToMpFile(cover, coverName); coverPath = sysBaseAPI.upload(mpFile,"cover", uploadType);//上傳文件到服務(wù)器 } catch (Exception e) { e.printStackTrace(); }
圖片工具類,供主要代碼調(diào)用
public class ImageUtils { /** * bufferedImage轉(zhuǎn)InputStream */ public static InputStream bufferedImageToInputStream(BufferedImage image) { ByteArrayOutputStream os = new ByteArrayOutputStream(); try { ImageIO.write(image, "png", os); InputStream input = new ByteArrayInputStream(os.toByteArray()); return input; } catch (IOException e) { } return null; } /** * 獲取圖片大小信息 */ public static Rectangle getImgRect(BufferedImage image) throws IOException { Iterator readers = ImageIO.getImageReadersByFormatName("png"); ImageReader reader = (ImageReader) readers.next(); InputStream source = bufferedImageToInputStream(image); ImageInputStream iis = ImageIO.createImageInputStream(source); reader.setInput(iis, true); int imageIndex = 0; return new Rectangle(0, 0, reader.getWidth(imageIndex), reader.getHeight(imageIndex)); } /** * 圖片裁剪,按指定大小裁剪 */ public static BufferedImage imageCut(BufferedImage image, Rectangle rect) throws IOException { // 取得圖片讀入器 Iterator readers = ImageIO.getImageReadersByFormatName("png"); System.out.println(readers); ImageReader reader = (ImageReader) readers.next(); System.out.println(reader); // 取得圖片讀入流 InputStream source = bufferedImageToInputStream(image); ImageInputStream iis = ImageIO.createImageInputStream(source); reader.setInput(iis, true); // 圖片參數(shù) ImageReadParam param = reader.getDefaultReadParam(); int imageIndex = 0; //Rectangle rect = new Rectangle(0, 0, reader.getWidth(imageIndex), 100); param.setSourceRegion(rect); BufferedImage bi = reader.read(0, param); iis.close(); source.close(); return bi; } /** * 壓縮圖片,用于高質(zhì)量圖片質(zhì)量降低,改變圖片大小 */ public static BufferedImage compressImage(BufferedImage imageByte, int ppi) { BufferedImage smallImage = null; int width = 0, height = 0; if (imageByte == null) return null; InputStream byteInput = bufferedImageToInputStream(imageByte); try { Image image = ImageIO.read(byteInput); int w = image.getWidth(null); int h = image.getHeight(null); // adjust weight and height to avoid image distortion double scale = 0; scale = Math.min((float) ppi / w, (float) ppi / h); width = (int) (w * scale); width -= width % 4; height = (int) (h * scale); if (scale >= (double) 1) return imageByte; BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); buffImg.getGraphics().drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null); //ByteArrayOutputStream out = new ByteArrayOutputStream(); //ImageIO.write(buffImg, "png", out); smallImage = buffImg; } catch (IOException e) { e.printStackTrace(); } return smallImage; } /** * 將BufferedImage轉(zhuǎn)換為byte[] * @param image * @return */ public static byte[] bufferedImageToByteArray(BufferedImage image) throws IOException{ ByteArrayOutputStream os = new ByteArrayOutputStream(); ImageIO.write(image, "png", os); return os.toByteArray(); } /** * 將BufferedImage轉(zhuǎn)換pdf */ public static String imageToPdf(List<BufferedImage> images) throws IOException { log.info("圖片轉(zhuǎn)pdf開始==============="); String newFile = StrUtil.uuid().replace("-", "") + ".pdf"; PdfWriter pdfWriter = new PdfWriter( newFile); PdfDocument pdfDocument = new PdfDocument(pdfWriter); Document document = new Document(pdfDocument); for (BufferedImage image : images) { byte[] data = bufferedImageToByteArray(image); com.itextpdf.layout.element.Image img = new com.itextpdf.layout.element.Image(ImageDataFactory.createPng(data)); document.add(img); } document.close(); log.info("圖片轉(zhuǎn)pdf結(jié)束==============="); return newFile; } /** * 獲取縮略圖圖片,用作封面,按長寬比例設(shè)備,高度太高裁掉,高度太低補(bǔ)余白 */ public static BufferedImage getCoverImage (BufferedImage originalImage) throws IOException { BufferedImage result = null; // 獲取圖片的長寬 int originalWidth = originalImage.getWidth(); int originalHeight = originalImage.getHeight(); Rectangle rect = ImageUtils.getImgRect(originalImage); if (rect.getHeight() > rect.getWidth()) { rect.setRect(0,0, rect.getWidth(), rect.getWidth() / 1.3); result = ImageUtils.imageCut(originalImage, rect); } else { int newWidth = 800; int newHeight = 600; // 計(jì)算縮放比例 double scale = Math.min((double) newWidth / originalWidth, (double) newHeight / originalHeight); // 計(jì)算調(diào)整后的長寬 int scaledWidth = (int) (originalWidth * scale); int scaledHeight = (int) (originalHeight * scale); // 創(chuàng)建新的BufferedImage對(duì)象,添加余白 BufferedImage resizedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g = resizedImage.createGraphics(); Color fillColor = new Color(255, 255, 255); // 白顏色 g.setColor(fillColor); g.fillRect(0, 0, newWidth, newHeight); g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null); g.dispose(); result = resizedImage; } return result; } }
到此這篇關(guān)于Java使用html2image將html生成縮略圖圖片的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Java 生成縮略圖圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud微服務(wù)基礎(chǔ)簡(jiǎn)介
今天帶大家學(xué)習(xí)一下SpringCloud微服務(wù)的相關(guān)知識(shí),文中有非常詳細(xì)的圖文示例及介紹,對(duì)正在學(xué)習(xí)SpringCloud微服務(wù)的小伙伴們很有幫助哦,需要的朋友可以參考下2021-05-05JAVA時(shí)間戳-Calendar類使用(包括set,get,add方法)
這篇文章主要介紹了JAVA時(shí)間戳-Calendar類使用(包括set,get,add方法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04如何實(shí)現(xiàn)自定義SpringBoot的Starter組件
這篇文章主要介紹了實(shí)現(xiàn)自定義SpringBoot的Starter組件的示例代碼,想要自定義starter組件,首先要了解springboot是如何加載starter的,也就是springboot的自動(dòng)裝配機(jī)制原理,本文結(jié)合示例代碼詳細(xì)講解,需要的朋友可以參考下2023-02-02Java中new Date().getTime()指定時(shí)區(qū)的時(shí)間戳問題小結(jié)
本文主要介紹了Java中new Date().getTime()時(shí)間戳問題小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07SpringBoot使用thymeleaf實(shí)現(xiàn)一個(gè)前端表格方法詳解
Thymeleaf是一個(gè)現(xiàn)代的服務(wù)器端 Java 模板引擎,適用于 Web 和獨(dú)立環(huán)境。Thymeleaf 的主要目標(biāo)是為您的開發(fā)工作流程帶來優(yōu)雅的自然模板,本文就來用它實(shí)現(xiàn)一個(gè)前端表格,感興趣的可以了解一下2022-10-10Java如何對(duì)返回參數(shù)進(jìn)行處理
這篇文章主要介紹了Java如何對(duì)返回參數(shù)進(jìn)行處理問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07Java獲取Jar、War包路徑并生成可編輯修改的本地配置文件
這篇文章主要給大家介紹了關(guān)于Java如何獲取Jar、War包路徑并生成可編輯修改的本地配置文件,文中通過代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01