Java中進行圖像I/O(即讀圖片和寫圖片,不涉及到復雜圖像處理)一個類包含靜態方便定位方法 ImageReaders和 ImageWriters,並進行簡單的編碼和解碼。
-
特別說明 imageio 文檔說明支持bmp 轉換的,但是實際上比不支持的,網絡上找了很多,有的人說開imagebuffer緩存但是實際上沒有作用, 使用opencv轉換還是有問題,不知道是java的問題還是本身就不支持,這個問題
困擾了我24小時,最后被迫無奈只能換成tiff格式. -
基本代碼
/*File f1 = new File("Z:\\java\\1.png");
BufferedImage image = ImageIO.read(f1);
File f2 = new File("Z:\\java\\2.tiff");
ImageIO.write(image, "png", f2);*///對應輸入圖片的格式
- 參數化代碼
@Test //獲取輸入輸出圖片格式
public void f1() {
String readFormats[] = ImageIO.getReaderFormatNames();
String writeFormats[] = ImageIO.getWriterFormatNames();
System.out.println( Arrays.asList(readFormats));
System.out.println( Arrays.asList(writeFormats));
}
@Test
public void f2() {
Iterator<ImageReader> iterator = ImageIO.getImageReadersByFormatName("png");
}
/**
* 對圖片裁剪,並把裁剪新圖片保存
* @param srcPath 讀取源圖片路徑
* @param toPath 寫入圖片路徑
* @param x 剪切起始點x坐標
* @param y 剪切起始點y坐標
* @param width 剪切寬度
* @param height 剪切高度
* @param readImageFormat 讀取圖片格式
* @param writeImageFormat 寫入圖片格式
* @throws IOException
*/
public void cropImage(String srcPath,String toPath,
int x,int y,int width,int height,
String readImageFormat,String writeImageFormat) throws IOException{
FileInputStream fis = null ;
ImageInputStream iis =null ;
try{
//讀取圖片文件
fis = new FileInputStream(srcPath);
Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(readImageFormat);
ImageReader reader = (ImageReader) it.next();
//獲取圖片流
iis = ImageIO.createImageInputStream(fis);
reader.setInput(iis,true) ;
ImageReadParam param = reader.getDefaultReadParam();
//定義一個矩形
Rectangle rect = new Rectangle(x, y, width, height);
//提供一個 BufferedImage,將其用作解碼像素數據的目標。
param.setSourceRegion(rect);
BufferedImage bi = reader.read(0,param);
//保存新圖片
ImageIO.write(bi, writeImageFormat, new File(toPath));
}finally{
if(fis!=null)
fis.close();
if(iis!=null)
iis.close();
}
}