首先放上最初的Image工具类
package util; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; public class ImageUtil { private ImageUtil() { } /** * 裁剪图像 * * @param x,y 起始点 * @param width,height 宽高 * @param srcpath 被裁减图像路径 * @param subpath 裁剪后保存路径 * @param type 图像类型 * @throws Exception */ public static void cut(int x, int y, int width, int height, String srcpath, String subpath, String type) throws Exception { FileInputStream is = null; ImageInputStream iis = null; try { // 读取图片文件 is = new FileInputStream(srcpath); Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(type); ImageReader reader = it.next(); // 获取图片流 iis = ImageIO.createImageInputStream(is); 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, type, new File(subpath)); } finally { if (is != null) is.close(); if (iis != null) iis.close(); } } /** * 获取图像真实类型 * * @param path 图像路径 * @return 图像类型 * @throws Exception */ public static String getTypeByStream(String path) throws Exception { FileInputStream is = new FileInputStream(path); String type = ""; byte[] b = new byte[4]; try { is.read(b, 0, b.length); } catch (Exception e) { e.printStackTrace(); } finally { if (null != is) { is.close(); } } type = bytesToHexString(b).toUpperCase(); if (type.contains("FFD8FF")) { return "jpg"; } else if (type.contains("89504E47")) { return "png"; } else if (type.contains("47494638")) { return "gif"; } else if (type.contains("49492A00")) { return "tif"; } else if (type.contains("424D")) { return "bmp"; } return type; } /** * byte数组转换成16进制字符串 * * @param src * @return */ private static String bytesToHexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder(); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } }