java 根据坐标和宽高对图片做剪切

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 width124 * @param height125 */ 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 width139 * @param height140 */ 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}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

java游戏开发杂谈

在Eclipse里,编写如下两个类:packagegame2;importjava.awt.Color;importjava.awt.Graphics;importjavax.swing.JPanel;/java游戏开发杂谈demo2:画

java验证码

packagecn.edu.pdsu.action;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.image.BufferedImage;importjava.uti