1import java.awt.Color; 2import java.awt.Graphics; 3import java.awt.Image; 4import java.awt.Rectangle; 5import java.awt.image.BufferedImage; 6import java.io.File; 7import java.io.FileInputStream; 8import java.io.FileNotFoundException; 9import java.io.FileOutputStream; 10import java.io.IOException; 11import java.io.OutputStream; 12import java.util.Arrays; 13import java.util.Date; 14 15import javax.imageio.ImageIO; 16import javax.imageio.ImageReadParam; 17import javax.imageio.ImageReader; 18import javax.imageio.stream.ImageInputStream; 19 20import com.lg.res.bean.common.FileData; 21 22 23 24 25public class ImageTailorUtil { 26 27 28 private static String DEFAULT_THUMB_PREVFIX = "thumb_"; 29 private static String DEFAULT_CUT_PREVFIX = "cut_"; 30 private static Boolean DEFAULT_FORCE = false; 31 32 33 /** 34 35 * @param srcImg 源图片 36 * @param output 图片输出流 37 * @param rect 需要截取部分的坐标和大小 38 */ 39 public boolean cutImage(File srcImg, OutputStream output, Rectangle rect){ 40 if(srcImg.exists()){ 41 FileInputStream fis = null; 42 ImageInputStream iis = null; 43 try { 44 fis = new FileInputStream(srcImg); 45 // ImageIO 支持的图片类型 : [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif] 46 String types = Arrays.toString(ImageIO.getReaderFormatNames()).replace("]", ","); 47 String suffix = null; 48 // 获取图片后缀 49 if(srcImg.getName().indexOf(".") > -1) { 50 suffix = srcImg.getName().substring(srcImg.getName().lastIndexOf(".") + 1); 51 }// 类型和图片后缀全部小写,然后判断后缀是否合法 52 if(suffix == null || types.toLowerCase().indexOf(suffix.toLowerCase()+",") < 0){ 53 System.out.println("Sorry, the image suffix is illegal. the standard image suffix is {}." + types); 54 return false; 55 } 56 // 将FileInputStream 转换为ImageInputStream 57 iis = ImageIO.createImageInputStream(fis); 58 // 根据图片类型获取该种类型的ImageReader 59 ImageReader reader = ImageIO.getImageReadersBySuffix(suffix).next(); 60 reader.setInput(iis,true); 61 ImageReadParam param = reader.getDefaultReadParam(); 62 param.setSourceRegion(rect); 63 BufferedImage bi = reader.read(0, param); 64 ImageIO.write(bi, suffix, output); 65 return true; 66 } catch (FileNotFoundException e) { 67 e.printStackTrace(); 68 } catch (IOException e) { 69 e.printStackTrace(); 70 } finally { 71 try { 72 if(fis != null) fis.close(); 73 if(iis != null) iis.close(); 74 } catch (IOException e) { 75 e.printStackTrace(); 76 } 77 } 78 }else { 79 System.out.println("the src image is not exist."); 80 } 81 return false; 82 } 83 84 public void cutImage(File srcImg, OutputStream output, int x, int y, int width, int height){ 85 cutImage(srcImg, output, new Rectangle(x, y, width, height)); 86 } 87 88 public FileData cutImage(File srcImg, String destImgPath, Rectangle rect){ 89 FileData fd = new FileData(); 90 String middledir = "cut_pic/"+SimpleDate.getCurDateLong();//中间路径 91 File destImg = new File(destImgPath+"/"+middledir); 92 if(!destImg.exists()){ 93 System.out.println("the dest "+destImgPath+" folder is not exist."); 94 destImg.mkdirs(); 95 System.out.println("create "+destImgPath+" folder "); 96 } 97 String cutFolderPath = destImg.getPath(); 98 try { 99 100 if(!destImg.isDirectory()) cutFolderPath = destImg.getParent(); 101 if(!cutFolderPath.endsWith(File.separator)) cutFolderPath = cutFolderPath + File.separator; 102 String fileName = srcImg.getName(); 103 String suffix = fileName.substring(fileName.lastIndexOf(".")); 104 String newfileName = DEFAULT_CUT_PREVFIX + "_" + new Date().getTime() + suffix; 105 String outPutFilePath =cutFolderPath+ newfileName; 106 System.out.println(outPutFilePath); 107 boolean b = cutImage(srcImg, new FileOutputStream(outPutFilePath), rect); 108 if (b) { 109 fd.setTailorPicPath(middledir+"/"+newfileName); 110 return fd; 111 } 112 } catch (FileNotFoundException e) { 113 System.out.println("the dest "+destImgPath+" is not exist."); 114 } 115 return null; 116 } 117 /** 118 * 119 * @param srcImg 原图片 120 * @param destImg 存放新生成的图片的文件夹路径 121 * @param x 左上角 x轴坐标 122 * @param y 左上角 y轴坐标 123 * @param width 宽 124 * @param height 高 125 */ 126 public FileData cutImage(File srcImg, String destImg, int x, int y, int width, int height){ 127 if (!srcImg.exists()) { 128 return null; 129 } 130 return cutImage(srcImg, destImg, new Rectangle(x, y, width, height)); 131 } 132 /** 133 * 134 * @param srcImg 原图片 135 * @param destImg 存放新生成的图片的文件夹路径 136 * @param x 左上角 x轴坐标 137 * @param y 左上角 y轴坐标 138 * @param width 宽 139 * @param height 高 140 */ 141 public FileData cutImage(String srcImg, String destImg, int x, int y, int width, int height){ 142 return cutImage(new File(srcImg), destImg, new Rectangle(x, y, width, height)); 143 } 144}
java 根据坐标和宽高对图片做剪切
Wesley13
2021-10-11
1047 1 0
点赞
收藏
评论区
加载中...