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);
}
}