1.java 图片image工具类,ImageUtil.java

package com.broadway.numpeople.utils;import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Transparency;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Date;
import javax.imageio.ImageIO;public class ImageUtil {/*** 裁剪PNG图片工具类* * @param fromFile*            源文件* @param toFile*            裁剪后的文件* @param outputWidth*            裁剪宽度* @param outputHeight*            裁剪高度* @param proportion*            是否是等比缩放*/public static void resizePng(File fromFile, File toFile, int outputWidth, int outputHeight,boolean proportion) {try {BufferedImage bi2 = ImageIO.read(fromFile);int newWidth;int newHeight;// 判断是否是等比缩放if (proportion) {// 为等比缩放计算输出的图片宽度及高度double rate1 = ((double) bi2.getWidth(null)) / (double) outputWidth + 0.1;double rate2 = ((double) bi2.getHeight(null)) / (double) outputHeight + 0.1;// 根据缩放比率大的进行缩放控制double rate = rate1 < rate2 ? rate1 : rate2;newWidth = (int) (((double) bi2.getWidth(null)) / rate);newHeight = (int) (((double) bi2.getHeight(null)) / rate);} else {newWidth = outputWidth; // 输出的图片宽度newHeight = outputHeight; // 输出的图片高度}BufferedImage to = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);Graphics2D g2d = to.createGraphics();to = g2d.getDeviceConfiguration().createCompatibleImage(newWidth, newHeight,Transparency.TRANSLUCENT);g2d.dispose();g2d = to.createGraphics();@SuppressWarnings("static-access")Image from = bi2.getScaledInstance(newWidth, newHeight, bi2.SCALE_AREA_AVERAGING);g2d.drawImage(from, 0, 0, null);g2d.dispose();ImageIO.write(to, "png", toFile);} catch (Exception e) {e.printStackTrace();}}//图片切割  四个参数分别为图像起点坐标和宽高public static BufferedImage cutImage(BufferedImage bi, int start_width,int start_height,int outputWidth, int outputHeight){try{// 源图宽度int srcWidth = bi.getWidth();// 源图高度int srcHeight = bi.getHeight();int destHeight = outputHeight;int destWidth = outputWidth;Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);Image img;ImageFilter cropFilter;// 四个参数分别为图像起点坐标和宽高cropFilter = new CropImageFilter(start_width, start_height,destWidth, destHeight);img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));BufferedImage tag = new BufferedImage(destWidth, destHeight,BufferedImage.TYPE_INT_RGB);Graphics2D g2d = tag.createGraphics();tag = g2d.getDeviceConfiguration().createCompatibleImage(destWidth, destHeight,Transparency.TRANSLUCENT);g2d.dispose();g2d = tag.createGraphics();
//          @SuppressWarnings("static-access")
//          Image from = bi.getScaledInstance(destWidth, destHeight, bi.SCALE_AREA_AVERAGING);g2d.drawImage(img, 0, 0, null);g2d.dispose();//          Graphics g = tag.getGraphics();
//          g.drawImage(img, 0, 0, null); // 绘制缩小后的图
//          g.dispose();return tag;}catch (Exception e){e.printStackTrace();}return null;}/**按照参数的宽高,拉伸图片* * fromFile:源图片* saveFile:保存的新图片* * */public static void ratioByWidthHeightImage(File fromFile, File saveFile, int width_bg, int height_bg) {try {BufferedImage image = ImageIO.read(fromFile);BufferedImage imageNew = new BufferedImage(width_bg,height_bg,BufferedImage.TYPE_INT_RGB);imageNew.getGraphics().drawImage(image.getScaledInstance(width_bg, height_bg, Image.SCALE_SMOOTH), 0, 0, null); // 绘制缩小后的图ImageIO.write(imageNew, "PNG", saveFile);} catch (Exception e) {e.printStackTrace();}}/*** 旋转图片* @param image* @param degree:旋转角度* @param bgcolor:背景颜色 可为null* @return*/public static BufferedImage rotateImg(BufferedImage image, int degree, Color bgcolor) {BufferedImage return_bi = null;try {int iw = image.getWidth();//原始图象的宽度int ih = image.getHeight();//原始图象的高度int w = 0;int h = 0;int x = 0;int y = 0;degree = degree % 360;if (degree < 0)degree = 360 + degree;//将角度转换到0-360度之间double ang = Math.toRadians(degree);//将角度转为弧度/***确定旋转后的图象的高度和宽度*/if (degree == 180 || degree == 0 || degree == 360) {w = iw;h = ih;} else if (degree == 90 || degree == 270) {w = ih;h = iw;} else {int d = iw + ih;w = (int) (d * Math.abs(Math.cos(ang)));h = (int) (d * Math.abs(Math.sin(ang)));}x = (w / 2) - (iw / 2);//确定原点坐标y = (h / 2) - (ih / 2);BufferedImage rotatedImage = new BufferedImage(w, h, image.getType());Graphics2D gs = (Graphics2D) rotatedImage.getGraphics();if (bgcolor == null) {rotatedImage = gs.getDeviceConfiguration().createCompatibleImage(w, h, Transparency.TRANSLUCENT);} else {gs.setColor(bgcolor);gs.fillRect(0, 0, w, h);//以给定颜色绘制旋转后图片的背景}AffineTransform at = new AffineTransform();at.rotate(ang, w / 2, h / 2);//旋转图象at.translate(x, y);AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);op.filter(image, rotatedImage);return_bi = rotatedImage;
//          image = rotatedImage;
//
//          ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
//          ImageOutputStream imageOut = ImageIO.createImageOutputStream(byteOut);
//          ImageIO.write(image, "png", imageOut);
//          return new ByteArrayInputStream(byteOut.toByteArray());} catch (Exception e) {e.printStackTrace();}   return return_bi;}/*** 设置背景色* @param image* @param color:背景颜色 可为null* @return*/public static BufferedImage setBgColor(BufferedImage srcImage, Color color) {BufferedImage return_bi = null;try {int w = srcImage.getWidth();//原始图象的宽度int h = srcImage.getHeight();//原始图象的高度return_bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);Graphics2D gs = (Graphics2D) return_bi.getGraphics();// 设置背景颜色
//          gs.setBackground(Color.WHITE);gs.setBackground(color);gs.clearRect(0, 0, w, h);// 设置图片居中显示gs.drawImage(srcImage, 0, 0, null);gs.dispose();} catch (Exception e) {e.printStackTrace();}   return return_bi;}/**合并图片 - 水平合并* 注意:水平合并时,需要注意两张图片的高度要一致* bi:源图片* bi2:源图片2* */public static BufferedImage mergeImage_x(BufferedImage bi, BufferedImage bi2) {try {// 源图宽/高int w1 = bi.getWidth();int h1 = bi.getHeight();// 源2图宽/高int w2 = bi2.getWidth();
//          int h2 = bi2.getHeight();int destWidth = w1 + w2;int destHeight = h1;// 生成新图片BufferedImage destImage = new BufferedImage(w1 + w2, h1, BufferedImage.TYPE_INT_RGB);Graphics2D g2d = destImage.createGraphics();destImage = g2d.getDeviceConfiguration().createCompatibleImage(destWidth, destHeight,Transparency.TRANSLUCENT);g2d.dispose();g2d = destImage.createGraphics();g2d.drawImage(bi, 0, 0, w1, h1, null);g2d.drawImage(bi2, w1, 0, w2, h1, null);g2d.dispose();return destImage;  } catch (Exception e) {e.printStackTrace();}return bi;}/**合并图片 * * bi:源图片* bi2:源图片2* bi2图片压bi的图片* */public static BufferedImage mergeImage(BufferedImage bi, BufferedImage bi2) {try {// 源图宽度int w = bi.getWidth();// 源图高度int h = bi.getHeight();Graphics g = bi.getGraphics();g.drawImage(bi2, 0, 0, w, h, null);  g.dispose();  } catch (Exception e) {e.printStackTrace();}return bi;}//文件的复制public static void imageCopy(String srcFile,String destFile){try {//创建文件输入流对象读取指定目录下的文件FileInputStream in=new FileInputStream(srcFile);//创建文件输出流对象读取指定目录下的文件FileOutputStream out=new FileOutputStream(destFile);byte[] buffer = new byte[1024]; //定义一个int类型的变量lengthint length=0;//获取文件拷贝的时间
//              long beginTime=System.currentTimeMillis();//通过循环将读取到的文件字节信息写入到新文件while((length=in.read(buffer)) > 0) {out.write(buffer,0,length);}
//              //获取拷贝后的时间
//              long endTime=System.currentTimeMillis();
//              //输出拷贝花费的时间
//              System.out.println("花费时间为:"+(endTime-beginTime)+"毫秒");//关闭流in.close();out.close();} catch (Exception e) {e.printStackTrace();}}/*** 测试*/public static void main(String[] args) throws Exception {Date date = new Date();
//      File fromFile = new File("c:/1.png");
//      File toFile = new File("c:/2.png");
//      resizePng(fromFile, toFile, 100, 100, false);//旋转图片
//      File srcImage = new File("D:/2023/2023-03/test.png");
//      BufferedImage image = ImageIO.read(srcImage);
//      int degree = 90;//旋转角度
//      BufferedImage rotateImg = rotateImg(image,degree, null);
//      String result_file_name = "D:/2023/2023-03/test_2.png";
//      // 输出为文件
//      ImageIO.write(rotateImg, "png", new File(result_file_name));//合并图片
//      File srcImage = new File("D:/2023/2023-03/test_merge1.png");
//      BufferedImage bi1 = ImageIO.read(srcImage);
//      File srcImage2 = new File("D:/2023/2023-03/test_merge2.png");
//      BufferedImage bi2 = ImageIO.read(srcImage2);
//      BufferedImage result_bi = mergeImage( bi1, bi2);
//      String result_file_name = "D:/2023/2023-03/test_merge_result.png";
//      // 输出为文件
//      ImageIO.write(result_bi, "png", new File(result_file_name));//文件的复制//imageCopy("D:/2023/2023-03/test_merge1.png","D:/2023/2023-03/test_merge1_copy.png");//设置背景色File srcImage = new File("D:/2023/2023-03/test.png");BufferedImage bi1 = ImageIO.read(srcImage);BufferedImage result_bi = setBgColor(bi1, Color.green);String result_file_name = "D:/2023/2023-03/test_bg_result.png";// 输出为文件ImageIO.write(result_bi, "png", new File(result_file_name));System.out.println("花费:"+(new Date().getTime() - date.getTime()));}
}

java 图片image工具类,ImageUtil.java相关推荐

  1. 图片处理工具类 - ImageUtils.java

    纯JAVA实现的图片处理工具类,提供图片的裁剪.压缩.获取尺寸.制作圆角等方法. 源码如下:(点击下载 -ImageUtils.java .FolderUtils.java .commons-io-2 ...

  2. java 图片合成 工具类_Java实现的微信图片处理工具类【裁剪,合并,等比例缩放等】...

    本文实例讲述了Java实现的微信图片处理工具类.分享给大家供大家参考,具体如下: 现在 外面核心,图片文章比较少,看了拷贝代码,而用不了,用相应jar包处理,很多等比例缩放,达不到 想要的给予的期望: ...

  3. java captcha 验证码_验证码图片生成工具类——Captcha.java

    验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. import java.awt.Color; import java.awt ...

  4. java图片处理工具类,很实用哦

    笔者以前在项目里要求处理图片,当时在博客里看到这篇不错的帖子,但是没有看到原作的出处,于是就不客气的转载下来了...同时感谢原创写出这么好的东西. 这个图像工具类可实现以下常用功能:缩放图像.切割图像 ...

  5. java制作海报工具类,java操作图片贴图,java给图片添加文字,调整字体颜色大小间距

    工具类 java操作图片,给一个大图片贴小图片,给图片添加文字并调整文字颜色,大小,字体间距,把本地图片或者网络图片加载到缓冲区 主要方法: imageIoRead方法,把图片加载到缓冲区 merge ...

  6. java 图片合成 工具类_Java实现的图片上传工具类完整实例

    本文实例讲述了Java实现的图片上传工具类.分享给大家供大家参考,具体如下: package com.gcloud.common; import javax.imageio.ImageIO; impo ...

  7. 整理:图片文件管理工具类---ImageUtil

    顶赞: Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传 - 享受技术带来的快乐 - CSDN博客 http://blog.csdn.net/jdsjlzx/artic ...

  8. 海报绘制 - Java 贴图 - Java 图片绘制工具类

    package tools.io;import lombok.AllArgsConstructor; import lombok.Getter;import javax.imageio.ImageIO ...

  9. java 图片合成 工具类_Java图片合成工具类

    importjava.awt.Color;importjava.awt.Graphics2D;importjava.awt.image.BufferedImage;importjava.io.File ...

最新文章

  1. Java Socket编程 - 基于TCP方式的二进制文件传输
  2. 初等数论--原根--原根间的关系,原根个数
  3. .net开源框架开源类库(整理)
  4. HTML5 Canvas中处理图像和视频
  5. scrollLeft. float
  6. 【跟着我们学Golang】基础结构
  7. gridview選發行彈出層 模板列
  8. Java基础----Java---集合框架---泛型、泛型方法、静态方法泛型、泛型接口、泛型限定、泛型类
  9. 拟合函数,偏差和方差
  10. js实现跟浏览器 ctrl+f 一样的效果
  11. python实现用户画像分析案例
  12. Pytorch中报错RuntimeError: The size of tensor a (60) must match the size of tensor b (56)
  13. 存储服务器在监控中的作用,监控项目中存储服务器IPSAN云存储方案的优劣势对比...
  14. OmniGraffle 制作表格 调整对象
  15. 悟空CRM项目测试实战(4)
  16. a标签download属性无效_html常用标签大全
  17. WIN7电脑如何共享WiFi
  18. 手机支架3d打印模型_新型高效率酶固定化3D打印支架
  19. linux gui开发工具2017,linux – 快速开发GUI命令行
  20. 客户机和虚拟机复制粘贴,即在VMware中安装VMware Tools问题解决

热门文章

  1. Inside of Stagefright
  2. 简单的五子棋小游戏(html+css+js)
  3. 手机wifi已连接但无法访问互联网_手机已连接但无法访问互联网,碰到这个情况怎么破?想不到是这样...
  4. c语言整型变量程序基本,C语言的数据类型→整型数据
  5. 计算机学习的一些书籍推荐
  6. sae保存图片 imagejpeg
  7. [乐意黎转载]残疾人与常人究竟有哪些区别
  8. 一个关于10%-3的小问题
  9. linux 工程师 考试试题,2017年信息安全工程师考试下午试题加答案
  10. 第四届橙瓜网络文学奖暨见证·网络文学20年作家评选正式开启,千人评委会隆重见证