import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import javax.imageio.ImageIO;
/**
* 圖片工具類
* @author cxp
*
*/
public final class ImgUtil {
private ImgUtil() {
}
/**
* 合并圖片
*
* @param path1
* 圖片路徑1
* @param path2
* 圖片路徑2
* @param path
* 新圖片路徑
* @throws IOException
*/
public static void mergeImage(String path1, String path2, String path)
throws IOException {
BufferedImage image1 = ImageIO.read(new File(path1));
BufferedImage image2 = ImageIO.read(new File(path2));
BufferedImage combined = new BufferedImage(image1.getWidth(),
image1.getHeight(), BufferedImage.TYPE_INT_RGB);
// paint both images, preserving the alpha channels
Graphics g = combined.getGraphics();
g.drawImage(image1, 0, 0, null);
g.drawImage(image2, 0, 0, null);
// Save as new image
ImageIO.write(combined, "png", new File(path));
}
/**
* 小圖片合并為大圖片
* @param path 大圖片的輸出路徑
* @param imgs 小圖片地址
* @param colCount
* @param samllWidth
* @param smallHeigh
* @param picName
* @return
*/
public static String createBigPng(String path, List<String> imgs,
int colCount, int samllWidth, int smallHeigh, String picName) {
try {
File bigImgTxt = new File(path + File.separator + picName + ".txt");
if (!bigImgTxt.exists()) {
bigImgTxt.createNewFile();
}
FileWriter fileWriter = new FileWriter(bigImgTxt);
int imgCount = imgs.size();
int rowCount = imgCount / colCount
+ (imgCount % colCount == 0 ? 0 : 1); // 小圖行數
int bigWidth = samllWidth * colCount;
int bigHeight = smallHeigh * rowCount;
// 按照大圖片寬高繪制一個背景圖片
BufferedImage bufImage = new BufferedImage(bigWidth, bigHeight,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufImage.createGraphics();
bufImage = g.getDeviceConfiguration().createCompatibleImage(
bigWidth, bigHeight, Transparency.TRANSLUCENT);
g.dispose();
g = bufImage.createGraphics();
int x = 0;
int y = 0; // 縱坐標
for (int i = 0; i < imgCount; i++) {
String imgName = imgs.get(i);
if (i % colCount == 0) {
x = 0;
if (i > 1) {
y += smallHeigh;
}
}
BufferedImage input = ImageIO.read(new File(imgName));
Image smallImg = input.getScaledInstance(samllWidth,
smallHeigh, Image.SCALE_SMOOTH);
g.drawImage(smallImg, x, y, null);
fileWriter.write(imgName.substring(
imgName.lastIndexOf("/") + 1, imgName.lastIndexOf("."))
+ ": ["
+ x
+ ","
+ y
+ ","
+ (x + samllWidth)
+ ","
+ (y + smallHeigh) + "]\r\n");
x += samllWidth;
}
g.dispose();
String bigPicPath = path + "/" + picName + ".png";
ImageIO.write(bufImage, "png", new File(bigPicPath));
if (fileWriter != null) {
fileWriter.flush();
fileWriter.close();
}
return bigPicPath;
} catch (Exception e) {
System.out.println("createBigJPG Failed!");
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
String path = "C:\\Users\\tt\\Desktop\\tupian";
File file = new File(path);
String[] imgsFiles = file.list();
List<String> imgs = Arrays.asList(imgsFiles);
createBigPng(path, imgs, 10, 48, 48, "tt.png");
}
}
圖片工具類——兩張圖片合并,小圖合并成大圖
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
推薦閱讀更多精彩內容
- TKImageView-可定制樣式的圖片裁剪工具類 最近接連做了幾個項目,都用到了圖片裁剪功能,每個項目對裁剪功能...
- 干貨要點: 1、敘述、描寫和說明是三種記“實”的能力。 2、議論和抒情是兩種寫“虛”的能力。 3、根據表達的中心,...