Java图片压缩

1package com.test; 2 3import com.sun.image.codec.jpeg.JPEGCodec; 4import com.sun.image.codec.jpeg.JPEGImageEncoder; 5import org.junit.Test; 6import javax.imageio.ImageIO; 7import java.awt.*; 8import java.awt.image.BufferedImage; 9import java.io.File; 10import java.io.FileOutputStream; 11import java.io.IOException; 12 13/** 14 *图片压缩 15 */ 16public class ImageTest { 17 18 private Image img; 19 private int width; 20 private int height; 21 22 @Test 23 public void test(){ 24 try{ 25 //压缩开始 26 ImageTest imgCom = new ImageTest("D://1.png"); 27 imgCom.resizeFix(400, 400,"D://2.png"); 28 //压缩结束 29 }catch (Exception e){ 30 e.printStackTrace(); 31 } 32 } 33 34 /** 35 * 构造函数 36 * @param fileName 图片路径 37 * @throws IOException 38 */ 39 public ImageTest(String fileName) throws IOException { 40 // 读入文件 41 File file = new File(fileName); 42 // 构造Image对象 43 img = ImageIO.read(file); 44 // 得到源图宽 45 width = img.getWidth(null); 46 // 得到源图长 47 height = img.getHeight(null); 48 } 49 50 /** 51 * 按照宽度还是高度进行压缩 52 * @param w int 最大宽度 53 * @param h int 最大高度 54 * @param filePath 图片路径 55 * @throws IOException 56 */ 57 public void resizeFix(int w, int h,String filePath) throws IOException { 58 if (width / height > w / h) { 59 resizeByWidth(w,filePath); 60 } else { 61 resizeByHeight(h,filePath); 62 } 63 } 64 65 /** 66 * 以宽度为基准,等比例放缩图片 67 * @param w int 新宽度 68 * @param filePath 图片路径 69 * @throws IOException 70 */ 71 public void resizeByWidth(int w,String filePath) throws IOException { 72 int h = (int) (height * w / width); 73 resize(w, h,filePath); 74 } 75 76 /** 77 * 以高度为基准,等比例缩放图片 78 * @param h int 新高度 79 * @param filePath 图片路径 80 * @throws IOException 81 */ 82 public void resizeByHeight(int h,String filePath) throws IOException { 83 int w = (int) (width * h / height); 84 resize(w, h,filePath); 85 } 86 87 /** 88 * 强制压缩/放大图片到固定的大小 89 * @param w int 新宽度 90 * @param h int 新高度 91 * @param filePath 92 * @throws IOException 93 */ 94 public void resize(int w, int h,String filePath) throws IOException { 95 // SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢 96 BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB ); 97 // 绘制缩小后的图 98 image.getGraphics().drawImage(img, 0, 0, w, h, null); 99 File destFile = new File(filePath); 100 // 输出到文件流 101 FileOutputStream out = new FileOutputStream(destFile); 102 // 可以正常实现bmp、png、gif转jpg 103 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 104 // JPEG编码 105 encoder.encode(image); 106 out.close(); 107 } 108}
点赞
收藏

评论区

加载中...

相关推荐

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(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

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

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )