ImageIO 合并图片工具

package com.huajie.bim;

/**
 * @Date: 2019/6/15 14:11
 * @Description: 合并图片工具
 */

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class CombineImagesUtil {
    public static String path = "C:\\Users\\Administrator\\Desktop\\er";

    /**
     * 导入本地图片到缓冲区
     */
    public static BufferedImage loadImageLocal(String imgName) {
        try {
            return ImageIO.read(new File(imgName));
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        return null;
    }

    /**
     * 导入网络图片到缓冲区
     */
    public static BufferedImage loadImageUrl(String urlStr) {
        try {
            URL url = new URL(urlStr);
            return ImageIO.read(url);
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        return null;
    }

    /**
     * 生成新图片到本地
     */
    public static void writeImageLocal(String path, BufferedImage img) {
        if (path != null && img != null) {
            try {
                ImageIO.write(img, "png", new File(path));
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
        }
    }

    /**
     * @decription: 合成新图片
     * @param:
     * @return:
     * @date: 2019/6/15 17:51
     */
    public static void newBufferImage(List<String> urls, int type, Integer x_num, Integer y_num) throws IOException {
        if(urls != null && urls.size() > 0 && x_num != null && y_num != null){
            PageType pageType = new PageType(type,x_num,y_num);
            List<BufferedImage> bufferedImages = new ArrayList<>();
            for(String url : urls){
                bufferedImages.add(changeImage(loadImageUrl(url), pageType.getSmall_w(), pageType.getSmall_h()));
            }
            mergeImages(bufferedImages,pageType);
        }

    }

    /**
     * @decription: 合成新图片
     * @param:
     * @return:
     * @date: 2019/6/15 17:51
     */
    public static void newBufferImageByFile(List<String> fileNames, int type, Integer x_num, Integer y_num) throws IOException {
        if(fileNames != null && fileNames.size() > 0 && x_num != null && y_num != null){
            PageType pageType = new PageType(type,x_num,y_num);
            List<BufferedImage> bufferedImages = new ArrayList<>();
            for(String fileName : fileNames){
                bufferedImages.add(changeImage(loadImageLocal(fileName), pageType.getSmall_w(), pageType.getSmall_h()));
            }
            mergeImages(bufferedImages,pageType);
        }

    }


     public static void mergeImages(List<BufferedImage> bufferedImages,PageType pageType) throws IOException {

        BufferedImage combined = new BufferedImage(pageType.getBig_w(), pageType.getBig_h(), BufferedImage.TYPE_INT_RGB);
        // paint both images, preserving the alpha channels
        Graphics g = combined.getGraphics();
        int i = 1;
        for(BufferedImage bufferedImage: bufferedImages){

            int yu = i % pageType.getX_num();
            int shang = i / pageType.getX_num();

            int x = ( yu > 0 ? (yu - 1) : (pageType.getX_num() -1) ) *  pageType.getSmall_w() ;
            int y = (yu != 0 ? shang  : shang -1) * pageType.getSmall_h();

            g.drawImage(bufferedImage, x, y, null);
            i++;
        }

        // Save as new image
        ImageIO.write(combined, "JPG", new File(path, "3.jpg"));
    }

    /**
     * 设置图片大小(单张图片)

     * @param newWidth 新图片宽度
     * @param newHeight 新图片高度
     */
    public static BufferedImage changeImage(BufferedImage img, int newWidth,int newHeight) {
        try {
            BufferedImage tag = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
            tag.getGraphics()
               .drawImage(img, 0, 0, newWidth, newHeight, null); // 绘制后的图
           return tag;
        } catch (Exception e) {
            System.out.println("处理文件出现异常");
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) throws IOException {

        List<String> urls = new ArrayList<>();
        urls.add("http://27.17.20.242:6086/bim/project/schedule/bridge/deck/item/download_qrcode?id=1518&code=importdeck-Z01-P1a-01");
        urls.add("http://27.17.20.242:6086/bim/project/schedule/bridge/deck/item/download_qrcode?id=1519&code=importdeck-Z01-P1b-02");
        urls.add("http://27.17.20.242:6086/bim/project/schedule/bridge/deck/item/download_qrcode?id=1521&code=importdeck-Z01-P2a-04");
        urls.add("http://27.17.20.242:6086/bim/project/schedule/bridge/deck/item/download_qrcode?id=1522&code=importdeck-Z01-P2a-05");
        urls.add("http://27.17.20.242:6086/bim/project/schedule/bridge/deck/item/download_qrcode?id=1518&code=importdeck-Z01-P1a-01");
        urls.add("http://27.17.20.242:6086/bim/project/schedule/bridge/deck/item/download_qrcode?id=1519&code=importdeck-Z01-P1b-02");
        urls.add("http://27.17.20.242:6086/bim/project/schedule/bridge/deck/item/download_qrcode?id=1521&code=importdeck-Z01-P2a-04");
        urls.add("http://27.17.20.242:6086/bim/project/schedule/bridge/deck/item/download_qrcode?id=1522&code=importdeck-Z01-P2a-05");
        urls.add("http://27.17.20.242:6086/bim/project/schedule/bridge/deck/item/download_qrcode?id=1518&code=importdeck-Z01-P1a-01");
        urls.add("http://27.17.20.242:6086/bim/project/schedule/bridge/deck/item/download_qrcode?id=1519&code=importdeck-Z01-P1b-02");
        urls.add("http://27.17.20.242:6086/bim/project/schedule/bridge/deck/item/download_qrcode?id=1521&code=importdeck-Z01-P2a-04");
        urls.add("http://27.17.20.242:6086/bim/project/schedule/bridge/deck/item/download_qrcode?id=1522&code=importdeck-Z01-P2a-05");
        CombineImagesUtil.newBufferImage(urls,PageType.A3_type,4,3);

//        String file1 =path+ "//importdeck-Y01-P1a-01.png";
//        String file2 =path+ "//importdeck-Y01-P1b-02.png";
//        String file3 =path+ "//importdeck-Y01-P2a-03.png";
//        String file4 =path+ "//importdeck-Y01-P2a-04.png";
//        String file5 =path+ "//importdeck-Y01-P2a-05.png";
//        String file6 =path+ "//importdeck-Y01-P2b-06.png";
//        String file7 =path+ "//importdeck-Y01-P2b-07.png";
//        String file8 =path+ "//importdeck-Y01-P2b-08.png";
//        String file9 =path+ "//importdeck-Z01-P1a-01.png";
//        String file10 =path+ "//importdeck-Z01-P1b-02.png";
//        String file11 =path+ "//importdeck-Z01-P2a-03.png";
//        String file12 =path+ "//importdeck-Z01-P2a-04.png";
//
//        List<String> files = new ArrayList<>();
//        files.add(file1);
//        files.add(file2);
//        files.add(file3);
//        files.add(file4);
//        files.add(file5);
//        files.add(file6);
//        files.add(file7);
//        files.add(file8);
//        files.add(file9);
//        files.add(file10);
//        files.add(file11);
//        files.add(file12);
//
//        CombineImagesUtil.newBufferImageByFile(files,PageType.A3_type,4,3);

    }

}

猜你喜欢

转载自blog.csdn.net/ww_ndsc_ww/article/details/92140677
今日推荐