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();
}
}
还没有评论,来说两句吧...