欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用html2image將html生成縮略圖圖片的實(shí)現(xiàn)示例

 更新時(shí)間:2023年12月04日 09:30:28   作者:我是唐贏  
本文主要介紹了Java使用html2image將html生成縮略圖圖片的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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)文章

  • java 中RandomAccess接口源碼分析

    java 中RandomAccess接口源碼分析

    這篇文章主要介紹了java 中RandomAccess接口源碼分析的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • SpringCloud微服務(wù)基礎(chǔ)簡(jiǎn)介

    SpringCloud微服務(wù)基礎(chǔ)簡(jiǎn)介

    今天帶大家學(xué)習(xí)一下SpringCloud微服務(wù)的相關(guān)知識(shí),文中有非常詳細(xì)的圖文示例及介紹,對(duì)正在學(xué)習(xí)SpringCloud微服務(wù)的小伙伴們很有幫助哦,需要的朋友可以參考下
    2021-05-05
  • JAVA時(shí)間戳-Calendar類使用(包括set,get,add方法)

    JAVA時(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組件

    這篇文章主要介紹了實(shí)現(xiàn)自定義SpringBoot的Starter組件的示例代碼,想要自定義starter組件,首先要了解springboot是如何加載starter的,也就是springboot的自動(dòng)裝配機(jī)制原理,本文結(jié)合示例代碼詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • Java中new Date().getTime()指定時(shí)區(qū)的時(shí)間戳問題小結(jié)

    Java中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-07
  • Dubbo3和Spring?Boot整合過程源碼解析

    Dubbo3和Spring?Boot整合過程源碼解析

    Dubbo首先是提供了一個(gè)單獨(dú)的模塊來和Spring Boot做整合,利用 Spring Boot自動(dòng)裝配的功能,配置了一堆自動(dòng)裝配的組件,本文介紹Dubbo3和Spring?Boot整合過程,需要的朋友一起看看吧
    2023-08-08
  • SpringBoot使用thymeleaf實(shí)現(xiàn)一個(gè)前端表格方法詳解

    SpringBoot使用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-10
  • Java如何對(duì)返回參數(shù)進(jìn)行處理

    Java如何對(duì)返回參數(shù)進(jìn)行處理

    這篇文章主要介紹了Java如何對(duì)返回參數(shù)進(jìn)行處理問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java中的守護(hù)線程問題

    Java中的守護(hù)線程問題

    這篇文章主要介紹了Java中的守護(hù)線程問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java獲取Jar、War包路徑并生成可編輯修改的本地配置文件

    Java獲取Jar、War包路徑并生成可編輯修改的本地配置文件

    這篇文章主要給大家介紹了關(guān)于Java如何獲取Jar、War包路徑并生成可編輯修改的本地配置文件,文中通過代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01

最新評(píng)論