Java使用html2image將html生成縮略圖圖片的實現(xiàn)示例
更新時間:2023年12月04日 09:30:28 作者:我是唐贏
本文主要介紹了Java使用html2image將html生成縮略圖圖片的實現(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); //有時會有加載圖片延遲,因此這里設置下延時 BufferedImage cover = imageGenerator.getBufferedImage();//獲取圖片 cover = ImageUtils.getCoverImage(cover);//將圖片轉成綜略圖 String coverName = UUIDGenerator.generate().toString() + ".png"; MultipartFile mpFile = FileUtils.imageToMpFile(cover, coverName); coverPath = sysBaseAPI.upload(mpFile,"cover", uploadType);//上傳文件到服務器 } catch (Exception e) { e.printStackTrace(); }
圖片工具類,供主要代碼調(diào)用
public class ImageUtils { /** * bufferedImage轉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; } /** * 壓縮圖片,用于高質量圖片質量降低,改變圖片大小 */ 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轉換為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轉換pdf */ public static String imageToPdf(List<BufferedImage> images) throws IOException { log.info("圖片轉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("圖片轉pdf結束==============="); return newFile; } /** * 獲取縮略圖圖片,用作封面,按長寬比例設備,高度太高裁掉,高度太低補余白 */ 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; // 計算縮放比例 double scale = Math.min((double) newWidth / originalWidth, (double) newHeight / originalHeight); // 計算調(diào)整后的長寬 int scaledWidth = (int) (originalWidth * scale); int scaledHeight = (int) (originalHeight * scale); // 創(chuàng)建新的BufferedImage對象,添加余白 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; } }
到此這篇關于Java使用html2image將html生成縮略圖圖片的實現(xiàn)示例的文章就介紹到這了,更多相關Java 生成縮略圖圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JAVA時間戳-Calendar類使用(包括set,get,add方法)
這篇文章主要介紹了JAVA時間戳-Calendar類使用(包括set,get,add方法),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04如何實現(xiàn)自定義SpringBoot的Starter組件
這篇文章主要介紹了實現(xiàn)自定義SpringBoot的Starter組件的示例代碼,想要自定義starter組件,首先要了解springboot是如何加載starter的,也就是springboot的自動裝配機制原理,本文結合示例代碼詳細講解,需要的朋友可以參考下2023-02-02Java中new Date().getTime()指定時區(qū)的時間戳問題小結
本文主要介紹了Java中new Date().getTime()時間戳問題小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07SpringBoot使用thymeleaf實現(xiàn)一個前端表格方法詳解
Thymeleaf是一個現(xiàn)代的服務器端 Java 模板引擎,適用于 Web 和獨立環(huán)境。Thymeleaf 的主要目標是為您的開發(fā)工作流程帶來優(yōu)雅的自然模板,本文就來用它實現(xiàn)一個前端表格,感興趣的可以了解一下2022-10-10Java獲取Jar、War包路徑并生成可編輯修改的本地配置文件
這篇文章主要給大家介紹了關于Java如何獲取Jar、War包路徑并生成可編輯修改的本地配置文件,文中通過代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考借鑒價值,需要的朋友可以參考下2024-01-01