之前使用JPEGCodec做图像缩放,效果蛮好的,但它从jdk1.7开始就被删除了,在eclipse里的时候可以通过设置来让它可以运行,但部署到服务器上的时候出现了找不到类情况。
于是乎去寻找其他方案,就找到了mortennobel包,结合ImageIO对图片处理
maven:
<dependency> <groupId>com.mortennobel</groupId> <artifactId>java-image-scaling</artifactId> <version>0.8.6</version> </dependency>
图片缩放:
public static void resize(File originalFile, File resizedFile,int newWidth, int newHeight, String formatName) { try { BufferedImage inputBufImage = ImageIO.read(originalFile); ResampleOp resampleOp = new ResampleOp(newWidth, newHeight);// 转换 BufferedImage rescaledTomato = resampleOp.filter(inputBufImage,null); ImageIO.write(rescaledTomato, formatName, resizedFile); } catch (IOException e) { e.printStackTrace(); } }
图片切割:
public final static void cut(File srcImageFile, File result, int x, int y,int width, int height, String formatName) { ImageInputStream iis = null; try { iis = ImageIO.createImageInputStream(srcImageFile); Iterator<ImageReader> iterator = ImageIO.getImageReaders(iis); ImageReader reader = (ImageReader) iterator.next(); reader.setInput(iis, true); ImageReadParam param = reader.getDefaultReadParam(); Rectangle rectangle = new Rectangle(x, y, width, height); param.setSourceRegion(rectangle); BufferedImage bi = reader.read(0, param); ImageIO.write(bi, formatName, result); } catch (Exception e) { e.printStackTrace(); } finally { if (iis != null) { try { iis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
formatName就是像PNG,JPEG这样的文件后缀名。