JAVA生成图片缩略图、JAVA截取图片局部内容
目前,google已经有了更好的处理JAVA图片的工具,请搜索:Thumbnailator
package com.ares.image.test;import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Arrays;import javax.imageio.ImageIO;import org.slf4j.Logger; import org.slf4j.LoggerFactory;import com.ares.slf4j.test.Slf4jUtil;/*** <p>Title: ImageUtil </p>* <p>Description: 使用JDK原生态类生成图片缩略图和裁剪图片 </p>* <p>Email: icerainsoft@hotmail.com </p> * @author Ares* @date 2014年10月28日 上午10:24:26*/ public class ImageUtil {static {Slf4jUtil.buildSlf4jUtil().loadSlf4j();}private Logger log = LoggerFactory.getLogger(getClass());private static String DEFAULT_PREVFIX = "thumb_";private static Boolean DEFAULT_FORCE = false;/*** <p>Title: thumbnailImage</p>* <p>Description: 根据图片路径生成缩略图 </p>* @param imagePath 原图片路径* @param w 缩略图宽* @param h 缩略图高* @param prevfix 生成缩略图的前缀* @param force 是否强制按照宽高生成缩略图(如果为false,则生成最佳比例缩略图)*/public void thumbnailImage(File imgFile, int w, int h, String prevfix, boolean force){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 image's 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 < (height*1.0)/h){if(width > w){h = Integer.parseInt(new java.text.DecimalFormat("0").format(height * w/(width*1.0)));log.debug("change image's 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 image's 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()));} catch (IOException e) {log.error("generate thumbnail image failed.",e);}}else{log.warn("the image is not exist.");}}public void thumbnailImage(String imagePath, int w, int h, String prevfix, boolean force){File imgFile = new File(imagePath);thumbnailImage(imgFile, w, h, prevfix, force);}public void thumbnailImage(String imagePath, int w, int h, boolean force){thumbnailImage(imagePath, w, h, DEFAULT_PREVFIX, force);}public void thumbnailImage(String imagePath, int w, int h){thumbnailImage(imagePath, w, h, DEFAULT_FORCE);}public static void main(String[] args) {new ImageUtil().thumbnailImage("imgs/Tulips.jpg", 100, 150);}}
效果:(原图是电脑"图片"文件夹下的郁金香图片,大小1024*768,生成的图片为200*150大小,保持4:3的比例)
JAVA 截取图片局部内容:
package com.ares.image.test;import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import java.util.Arrays;import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream;import org.slf4j.Logger; import org.slf4j.LoggerFactory;import com.ares.slf4j.test.Slf4jUtil;/*** <p>Title: ImageUtil </p>* <p>Description: </p>* <p>Email: icerainsoft@hotmail.com </p> * @author Ares* @date 2014年10月28日 上午10:24:26*/ public class ImageUtil {static {Slf4jUtil.buildSlf4jUtil().loadSlf4j();}private Logger log = LoggerFactory.getLogger(getClass());private static String DEFAULT_THUMB_PREVFIX = "thumb_";private static String DEFAULT_CUT_PREVFIX = "cut_";private static Boolean DEFAULT_FORCE = false;/*** <p>Title: cutImage</p>* <p>Description: 根据原图与裁切size截取局部图片</p>* @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 转换为ImageInputStreamiis = ImageIO.createImageInputStream(fis);// 根据图片类型获取该种类型的ImageReaderImageReader reader = ImageIO.getImageReadersBySuffix(suffix).next();reader.setInput(iis,true);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, OutputStream output, int x, int y, int width, int height){cutImage(srcImg, output, new java.awt.Rectangle(x, y, width, height));}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 + "_" + new java.util.Date().getTime() + "_" + 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(File srcImg, String destImg, int x, int y, int width, int height){cutImage(srcImg, destImg, new java.awt.Rectangle(x, y, width, height));}public void cutImage(String srcImg, String destImg, int x, int y, int width, int height){cutImage(new File(srcImg), destImg, new java.awt.Rectangle(x, y, width, height));}/*** <p>Title: thumbnailImage</p>* <p>Description: 根据图片路径生成缩略图 </p>* @param imagePath 原图片路径* @param w 缩略图宽* @param h 缩略图高* @param prevfix 生成缩略图的前缀* @param force 是否强制按照宽高生成缩略图(如果为false,则生成最佳比例缩略图)*/public void thumbnailImage(File srcImg, OutputStream output, int w, int h, String prevfix, boolean force){if(srcImg.exists()){try {// 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 ;}log.debug("target image's size, width:{}, height:{}.",w,h);Image img = ImageIO.read(srcImg);// 根据原图与要求的缩略图比例,找到最合适的缩略图比例if(!force){int width = img.getWidth(null);int height = img.getHeight(null);if((width*1.0)/w < (height*1.0)/h){if(width > w){h = Integer.parseInt(new java.text.DecimalFormat("0").format(height * w/(width*1.0)));log.debug("change image's 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 image's 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();// 将图片保存在原目录并加上前缀ImageIO.write(bi, suffix, output);output.close();} catch (IOException e) {log.error("generate thumbnail image failed.",e);}}else{log.warn("the src image is not exist.");}}public void thumbnailImage(File srcImg, int w, int h, String prevfix, boolean force){String p = srcImg.getAbsolutePath();try {if(!srcImg.isDirectory()) p = srcImg.getParent();if(!p.endsWith(File.separator)) p = p + File.separator;thumbnailImage(srcImg, new java.io.FileOutputStream(p + prevfix +srcImg.getName()), w, h, prevfix, force);} catch (FileNotFoundException e) {log.error("the dest image is not exist.",e);}}public void thumbnailImage(String imagePath, int w, int h, String prevfix, boolean force){File srcImg = new File(imagePath);thumbnailImage(srcImg, w, h, prevfix, force);}public void thumbnailImage(String imagePath, int w, int h, boolean force){thumbnailImage(imagePath, w, h, DEFAULT_THUMB_PREVFIX, DEFAULT_FORCE);}public void thumbnailImage(String imagePath, int w, int h){thumbnailImage(imagePath, w, h, DEFAULT_FORCE);}public static void main(String[] args) {new ImageUtil().thumbnailImage("imgs/Tulips.jpg", 150, 100);new ImageUtil().cutImage("imgs/Tulips.jpg","imgs", 250, 70, 300, 400);}}
效果如下:(使用在上传图片时取缩略图和截图的地方,例如,图像截取并缩略)
JAVA生成图片缩略图、JAVA截取图片局部内容相关推荐
- java生成缩略图,接收图片,按指定宽高或按比例生成缩略图
全栈工程师开发手册 (作者:栾鹏) java教程全解 java生成缩略图,接收图片,按指定宽高或按比例生成缩略图,能有效降低前端访问图片的流量负载. 支持的图片类型 : [BMP, bmp, jpg, ...
- java 视频 缩略图_Java截取视频文件缩略图
/** * 截取视频第0帧的图片 */ public static void videoImage(String filePath, String fileName,int widthdist, in ...
- java opencv 打开摄像头截取图片
先到官网下载 https://opencv.org/releases/ 我的是windows 版 下载好后打开自动解压,opencv文件夹,打开里面的build\java,将opencv-460.ja ...
- java 图片处理 图片缩略图,java怎么生成图片缩略图,缩小图片,高清图片缩小
java如何生成图片缩略图,缩小图片,高清图片缩小 可以把图片缩小到理想的倍数,也可以根据自己的需要来具体规定图片转化后的大小 对于类型为jpg的图片来说,只需要三个参数就能转化得到自己想要的图片 参 ...
- java图片裁剪和java生成缩略图
一.缩略图 在浏览相册的时候,可能需要生成相应的缩略图. 直接上代码: public class ImageUtil {private Logger log = LoggerFactory.getLo ...
- java将图片转成缩略图,将图片生成缩略图Java代码实现
在工作中经常会遇到图片处理相关的需求,比如说一些图片网站只展示相关的缩略图,而真实的图片可能很大而不是直接展示.所以就需要在上传相关的图片后直接对图片进行处理生成相关的缩略图.实现代码如下: impo ...
- java 上传图片 生成缩略图_将图片生成缩略图Java代码实现
在工作中经常会遇到图片处理相关的需求,比如说一些图片网站只展示相关的缩略图,而真实的图片可能很大而不是直接展示.所以就需要在上传相关的图片后直接对图片进行处理生成相关的缩略图.实现代码如下: impo ...
- java截取图片-设置方位+设置大小
java截取图片-设置方位+设置大小 package com.onegrid.darj.test; import java.awt.Rectangle; import java.awt.image ...
- java 打开word(docx)替换内容,并插入图片(盖章)
引入jar包 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml< ...
最新文章
- java beans 组件_如何利用JavaBeans在应用程序中创建组件?
- 《c语言从入门到精通》看书笔记——第8章 数组
- 微信电脑客户端_无聊的话,用微信玩玩电脑
- leetcode剑指 Offer 29. 顺时针打印矩阵
- powerdesigner15(pd)+Oracle 11g 开发小问题
- 企业办公oa系统医药OA办公后台管理会议管理用户管理物料管理活动管理/Axure医药内部管理平台/web端后台管理系统原型/医药OA系统/权限管理
- mysql navicat报表_使用Navicat定时备份mysql数据库和创建报表并邮件自动发送
- autocad完全应用指南_北京博超时代软件有限公司软件SQL安装指南
- 带你轻轻松松了解route-map
- 当你是个35岁的硬件工程师,该如何选择未来的职业道路
- 阿里巴巴的安全能力究竟是什么水平?
- 随机变量概率分布函数汇总-离散型分布+连续型分布
- mysql indentify_ORA-01157: cannot identify/lock data file导致表空间无法on
- matlab实现A律13折线的编码和译码以及量化误差的计算
- solr版本的选择,4.X如何选择?
- 【YOLOv5】结合GradCAM热力图可视化
- ibm ilog mysql_IBM ILOG CPLEX Optimization Studio: 一个整数规划的案例
- 浏览器截图截取整个页面的方法
- 银行资产负债表-分科目详细解释
- 高手日志:我所接触到的那些马丁策略(上)
热门文章
- h264和h265的区别
- 超人气塔防游戏:气球塔防6 for Mac(v26.2.4058中文版)
- 高并发(1)---概念
- 马云给了马化腾一记重拳
- Android acra 日志上报,基于开源项目acra实现的定制化Android crash上报库及后台系统...
- Excel MODE.MULT函数获取一组数值中出现频率最多的数据
- 阿里云IoT平台CoAP接入 1 开发准备
- html5精准布局,详测3060Ti/3080,好刀法砍出精准布局
- python随机生成20个整数列表、找出被7除余5_the date of departure
- 微信小程序播放背景音乐及开发工具没有声音问题解决