java图片裁剪和java生成缩略图.doc_第1页
java图片裁剪和java生成缩略图.doc_第2页
java图片裁剪和java生成缩略图.doc_第3页
java图片裁剪和java生成缩略图.doc_第4页
java图片裁剪和java生成缩略图.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java图片裁剪和java生成缩略图一、缩略图在浏览相册的时候,可能需要生成相应的缩略图。 直接上代码:public class ImageUtil private Logger log = LoggerFactory.getLogger(getClass(); private static String DEFAULT_PREVFIX = thumb_; private static Boolean DEFAULT_FORCE = false;/建议该值为false /* * Title: thumbnailImage * Description: 根据图片路径生成缩略图 * param imagePath 原图片路径 * param w 缩略图宽 * param h 缩略图高 * param prevfix 生成缩略图的前缀 * param force 是否强制按照宽高生成缩略图(如果为false,则生成最佳比例缩略图) */ public void thumbnailImage(String imagePath, int w, int h, String prevfix, boolean force) File imgFile = new File(imagePath); if(imgFile.exists() try / ImageIO 支持的图片类型 : BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif String types = Arrays.toString(ImageIO.getReaderFormatNames(); String suffix = null; / 获取图片后缀 if(imgFile.getName().indexOf(.) -1) suffix = imgFile.getName().substring(imgFile.getName().lastIndexOf(.) + 1); / 类型和图片后缀全部小写,然后判断后缀是否合法 if(suffix = null | types.toLowerCase().indexOf(suffix.toLowerCase() 0) log.error(Sorry, the image suffix is illegal. the standard image suffix is . + types); return ; log.debug(target images size, width:, height:.,w,h); Image img = ImageIO.read(imgFile); if(!force) / 根据原图与要求的缩略图比例,找到最合适的缩略图比例 int width = img.getWidth(null); int height = img.getHeight(null); if(width*1.0)/w w) h = Integer.parseInt(new java.text.DecimalFormat(0).format(height * w/(width*1.0); log.debug(change images height, width:, height:.,w,h); else if(height h) w = Integer.parseInt(new java.text.DecimalFormat(0).format(width * h/(height*1.0); log.debug(change images width, width:, height:.,w,h); BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics g = bi.getGraphics(); g.drawImage(img, 0, 0, w, h, Color.LIGHT_GRAY, null); g.dispose(); String p = imgFile.getPath(); / 将图片保存在原目录并加上前缀 ImageIO.write(bi, suffix, new File(p.substring(0,p.lastIndexOf(File.separator) + File.separator + prevfix +imgFile.getName(); log.debug(缩略图在原路径下生成成功); catch (IOException e) log.error(generate thumbnail image failed.,e); else log.warn(the image is not exist.); public static void main(String args) new ImageUtil().thumbnailImage(C:/Users/cm/Desktop/我的页面/images/girlNoImg.jpg, 100, 150,DEFAULT_PREVFIX,DEFAULT_FORCE); 直接运行main方法,填入相对应的参数即可。二、配合 js 生成裁剪图片在我们修改个人微博、qq资料的时候可以上传个人头像,并可以剪裁个人头像然后上传。剪裁图片的大小样式是通过JavaScript实现的,但是它并不能生成一个新的图片。但是js剪裁图片提供图片的x,y坐标以及宽高,通过这四个参数我们可以根据原图片生成新的剪裁图片。 步骤: 1、首先通过页面利用js实现图片剪切浏览功能,我参照慕课网提供的资料并稍微更改了一下。另外我们也可以使用插件,比如Jcrop是款很不错的图片裁剪插件。最后效果图如上,左侧可以拖动拖拉,右侧是预览图。 2、Java生成并保存剪切图片public class ImageUtil2 private Logger log = LoggerFactory.getLogger(getClass(); private static String DEFAULT_CUT_PREVFIX = cut_; /* * Description: 根据原图与裁切size截取局部图片 * param srcImg 源图片 * param output 图片输出流 * param rect 需要截取部分的坐标和大小 */ public void cutImage(File srcImg, OutputStream output,java.awt.Rectangle rect) if (srcImg.exists() java.io.FileInputStream fis = null; ImageInputStream iis = null; try fis = new FileInputStream(srcImg); / ImageIO 支持的图片类型 : BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, / JPEG, WBMP, GIF, gif String types = Arrays.toString(ImageIO.getReaderFormatNames() .replace(, ,); String suffix = null; / 获取图片后缀 if (srcImg.getName().indexOf(.) -1) suffix = srcImg.getName().substring(srcImg.getName().lastIndexOf(.) + 1); / 类型和图片后缀全部小写,然后判断后缀是否合法 if (suffix = null | types.toLowerCase().indexOf(suffix.toLowerCase() + ,) 0) log.error(Sorry, the image suffix is illegal. the standard image suffix is .+ types); return; / 将FileInputStream 转换为ImageInputStream iis = ImageIO.createImageInputStream(fis); / 根据图片类型获取该种类型的ImageReader ImageReader reader = ImageIO.getImageReadersBySuffix(suffix).next(); reader.setInput(iis, ue); ImageReadParam param = reader.getDefaultReadParam(); param.setSourceRegion(rect); BufferedImage bi = reader.read(0, param); ImageIO.write(bi, suffix, output); (图片生成成功,请到目录下查看); catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); finally try if (fis != null) fis.close(); if (iis != null) iis.close(); catch (IOException e) e.printStackTrace(); else log.warn(the src image is not exist.); /生成目标文件路径 public void cutImage(File srcImg, String destImgPath,java.awt.Rectangle rect) File destImg = new File(destImgPath); if (destImg.exists() String p = destImg.getPath(); try if (!destImg.isDirectory() p = destImg.getParent(); if (!p.endsWith(File.separator) p = p + File.separator; cutImage(srcImg,new java.io.FileOutputStream(p + DEFAULT_CUT_PREVFIX+ _+ srcImg.getName(), rect); catch (FileNotFoundException e) log.warn(the dest image is not exist.); else log.warn(the dest image folder is not exist.); public void cutImage(String srcImg, String destImg, int x, int y, int width, int ght) cutImage(new File(srcImg), destImg, new java.awt.Rectangle(x, y, width, height); public static void main(String args) new ImageUtil2().cutImage(C:/Users/cm/Desktop/我的页面/images/boyNoImg.jpg, C:/Users/cm/Desktop/我的页面/images/imgs,0, 0, 61, 166); /new ImageUtil2().cutImage(C:/Users/cm/Desktop/Jcrop-master/demos/demo_files/sago.jpg, C:/Users/cm/Desktop/我的页面/images/imgs,124, 110, 196, 176); 该方法可以直接在main里运行。传入的四个参数分别为图像路径、left值、top值,长度、宽度。下面分析一下怎么获取这四个参数: 1、 以我的js剪切为例,通过F12获得如下:图片中红色部分就是图片剪切的div,我们可以通过拖拽剪裁区大小宽度等来观察改变了哪些参数,然后确定具体对应的参数值分别对应哪个参数值。如图片中我的x/y/width/height分别为40,28,224,228。注意:在js中我将该div和图片的长宽都定义为300*300,为配合测试所以我下载的图片也为300*300。如果你测试的图片大小不为300*300,那么你直接在上面java中测试的效果会和你前端看到的不一样,因为你前端的图片宽高我定义为300*300,而你实际图片(即java中的图片)不是。那么这个问题如果处理呢?在你的java代码中获取原图片的长宽

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论