package com.prj.controller;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class ImageWithArray {
public static void main(String []args){
//讀取圖片到BufferImage
BufferedImage bf = readImage("D:\\easy-shopping\\WebContent\\upload\\image\\ad_login.jpg");//讀取絕對路徑+文件名
//Image轉化二維數組
int[][] rgbArray1 = convertImageToArray(bf);
//輸出圖片到指定文件
writeImageFromArray("D:\\IDEA\\2.jpg","jpg",rgbArray1);//輸出絕對路徑+文件名
System.out.println("圖片輸出完畢!");
}
private static BufferedImage readImage(String imageFile) {
File file= new File(imageFile);
BufferedImage bf = null;
try{
bf =ImageIO.read(file);
}catch (Exception e) {
e.printStackTrace();
}
return bf;
}
private static int[][] convertImageToArray(BufferedImage bf) {
// 獲取圖片的寬度和高度
int width = bf.getWidth();
int height = bf.getHeight();
//將圖片sRGB數據寫入一維數組中
int [] data = new int[width*height];
bf.getRGB(0, 0, width, height, data, 0, width);
//將一維數組轉換為二維數組
int[][] rgbArray = new int[height][width];
for(int i=0;i<height;i++)
for(int j=0;j<width;j++)
rgbArray[i][j] = data[i*width+j];
return rgbArray;
}
private static void writeImageFromArray(String imageFile, String type,int[][] rgbArray) {
//獲取數組寬度和高度
int width = rgbArray[0].length;
int height = rgbArray.length;
//將二維數組轉換一維數組
int [] data = new int[width*height];
for(int i=0;i<height;i++)
for(int j=0;j<height;j++)
data[i*width+j]=rgbArray[i][j];
//將數據寫入BufferImage
BufferedImage bf = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
bf.setRGB(0, 0, width, height, data, 0, width);
//輸出圖片
try{
File file = new File(imageFile);
ImageIO.write((BufferedImage)bf, type, file);
}catch (Exception e) {
e.printStackTrace();
}
}
}
