Java获取图片大小 及 尺寸

/*** 获取图片大小 及 尺寸(测试)* @param filePath* @return* @throws FileNotFoundException* @throws IOException*/
public static Float getImgWidthTest(String filePath) throws FileNotFoundException, IOException {//图片大小(文件大小)File picture = new File(filePath);Float size = Float.parseFloat(String.format("%.1f",picture.length() / 1024.0 / 1024.0));System.out.println("图片大小:" + size + "MB");//图片尺寸BufferedImage sourceImg  = ImageIO.read(new FileInputStream(picture));System.out.println("宽:" + sourceImg.getWidth());System.out.println("高:" + sourceImg.getHeight());return size;
}

图片压缩-新2022(解决打包时报错“程序包com.sun.image.codec.jpeg不存在”的问题)

package com.qyj.utils;import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.*;import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;//import com.sun.image.codec.jpeg.JPEGCodec;
//import com.sun.image.codec.jpeg.JPEGImageEncoder;public class CompressImgUtil extends HttpServlet {private static final long serialVersionUID = 1L;/*** 采用指定宽度、高度或压缩比例 的方式对图片进行压缩* like12 modified,20220615,支持指定宽/高(高/宽自适应-使图片不失真)** @param imgsrc 源图片地址* @param out 目标图片地址* @param widthdist 压缩后图片宽度(当rate==null时,必传)* @param heightdist 压缩后图片高度(当rate==null时,必传)* @param rate 压缩比例*/public static void compressImg(String imgsrc, ByteArrayOutputStream out, int widthdist,int heightdist, Float rate) {try {File srcfile = new File(imgsrc);// 检查文件是否存在if (!srcfile.exists()) {return;}// 如果rate不为空说明是按比例压缩if (rate != null && rate > 0) {// 获取文件高度和宽度int[] results = getImgWidth(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {widthdist = (int) (results[0] * rate);heightdist = (int) (results[1] * rate);}}//like12 modified,20220615,支持指定宽/高(高/宽自适应-使图片不失真)else if(rate == null && widthdist > 0 && heightdist == 0){// 获取文件高度和宽度int[] results = getImgWidth(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {rate = (float)(widthdist * 1.0 / results[0]);heightdist = (int) (results[1] * rate);}}else if(rate == null && widthdist == 0 && heightdist > 0){// 获取文件高度和宽度int[] results = getImgWidth(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {rate = (float)(heightdist * 1.0 / results[1]);widthdist = (int) (results[0] * rate);}}// 开始读取文件并进行压缩Image src = ImageIO.read(srcfile);BufferedImage tag = new BufferedImage((int) widthdist,(int) heightdist, BufferedImage.TYPE_INT_RGB);tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist,Image.SCALE_SMOOTH), 0, 0, null);//like12 modified,20221113,解决打包时报错“程序包com.sun.image.codec.jpeg不存在”的问题/*//过时的实现类JPEGImageEncoder,是sun公司的私有实现JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(tag);*///使用统一的ImageIO进行图像格式文件的读写String formatName = imgsrc.substring(imgsrc.lastIndexOf(".") + 1);ImageIO.write(tag, formatName, out);} catch (IOException ex) {ex.printStackTrace();}}/*** 采用指定宽度、高度或压缩比例 的方式对图片进行压缩* like12 modified,20220615,支持指定宽/高(高/宽自适应-使图片不失真)** @param imgsrc 源图片地址* @param imgdist 目标图片地址* @param widthdist 压缩后图片宽度(当rate==null时,必传)* @param heightdist 压缩后图片高度(当rate==null时,必传)* @param rate 压缩比例*/public static void compressImg(String imgsrc, String imgdist, int widthdist,int heightdist, Float rate) {try {File srcfile = new File(imgsrc);// 检查文件是否存在if (!srcfile.exists()) {return;}// 如果rate不为空说明是按比例压缩if (rate != null && rate > 0) {// 获取文件高度和宽度int[] results = getImgWidth(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {widthdist = (int) (results[0] * rate);heightdist = (int) (results[1] * rate);}}//like12 modified,20220615,支持指定宽/高(高/宽自适应-使图片不失真)else if(rate == null && widthdist > 0 && heightdist == 0){// 获取文件高度和宽度int[] results = getImgWidth(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {rate = (float)(widthdist * 1.0 / results[0]);heightdist = (int) (results[1] * rate);}}else if(rate == null && widthdist == 0 && heightdist > 0){// 获取文件高度和宽度int[] results = getImgWidth(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {rate = (float)(heightdist * 1.0 / results[1]);widthdist = (int) (results[0] * rate);}}// 开始读取文件并进行压缩Image src = ImageIO.read(srcfile);BufferedImage tag = new BufferedImage((int) widthdist,(int) heightdist, BufferedImage.TYPE_INT_RGB);tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist,Image.SCALE_SMOOTH), 0, 0, null);//like12 modified,20221113,解决打包时报错“程序包com.sun.image.codec.jpeg不存在”的问题/*//过时的实现类JPEGImageEncoder,是sun公司的私有实现FileOutputStream out = new FileOutputStream(imgdist);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(tag);out.close();*///使用统一的ImageIO进行图像格式文件的读写String formatName = imgdist.substring(imgdist.lastIndexOf(".") + 1);ImageIO.write(tag, formatName, new File(imgdist));} catch (IOException ex) {ex.printStackTrace();}}/*** 获取图片宽度* * @param file*            图片文件* @return 宽度*/public static int[] getImgWidth(File file) {InputStream is = null;BufferedImage src = null;int result[] = { 0, 0 };try {is = new FileInputStream(file);src = ImageIO.read(is);result[0] = src.getWidth(null); // 得到源图宽result[1] = src.getHeight(null); // 得到源图高is.close();} catch (Exception e) {e.printStackTrace();}return result;}/*** 获取图片大小 及 尺寸(测试)* @param filePath* @return* @throws FileNotFoundException* @throws IOException*/public static Float getImgWidthTest(String filePath) throws FileNotFoundException, IOException {//图片大小(文件大小)File picture = new File(filePath);Float size = Float.parseFloat(String.format("%.1f",picture.length() / 1024.0 / 1024.0));System.out.println("图片大小:" + size + "MB");//图片尺寸BufferedImage sourceImg  = ImageIO.read(new FileInputStream(picture));System.out.println("宽:" + sourceImg.getWidth());System.out.println("高:" + sourceImg.getHeight());return size;}public static void main(String[] args) throws FileNotFoundException, IOException {System.out.println("图片压缩测试...");/*//获取图片大小CompressImgUtil.getImgWidthTest("D:/test.jpg");*///图片压缩String srcFile = "D://test.jpg";String destFile = "D://tempCompressImg.jpg";//String destFile = "D://test.jpg";//相同路径可以覆盖File srcfile = new File(srcFile);System.out.println("压缩前srcfile size:" + srcfile.length());//压缩(相同路径可以覆盖)//CompressImgUtil.compressImg(srcFile, destFile, 600, 800, null);//CompressImgUtil.compressImg(srcFile, destFile, 110, 130, null);//CompressImgUtil.compressImg(srcFile, destFile, 110, 0, null);//CompressImgUtil.compressImg(srcFile, destFile, 0, 130, null);CompressImgUtil.compressImg(srcFile, destFile, 0, 0, Float.parseFloat("0.5"));File distfile = new File(destFile);System.out.println("压缩后distfile size:" + distfile.length());System.out.println("Finish!");}
}

图片压缩-老版本(新架构打包时会报错“程序包com.sun.image.codec.jpeg不存在”)

CompressImgUtil.java

package com.qyj.utils;import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.*;import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;public class CompressImgUtil extends HttpServlet {private static final long serialVersionUID = 1L;/*** 采用指定宽度、高度或压缩比例 的方式对图片进行压缩(流模式 不保存中间文件)* like12 modified,20220615,支持指定宽/高(高/宽自适应-使图片不失真)** @param imgsrc 源图片地址* @param out 目标图片地址* @param widthdist 压缩后图片宽度(当rate==null时,必传)* @param heightdist 压缩后图片高度(当rate==null时,必传)* @param rate 压缩比例*/public static void compressImg(String imgsrc, ByteArrayOutputStream out, int widthdist,int heightdist, Float rate) {try {File srcfile = new File(imgsrc);// 检查文件是否存在if (!srcfile.exists()) {return;}// 如果rate不为空说明是按比例压缩if (rate != null && rate > 0) {// 获取文件高度和宽度int[] results = getImgWidth(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {widthdist = (int) (results[0] * rate);heightdist = (int) (results[1] * rate);}}//like12 modified,20220615,支持指定宽/高(高/宽自适应-使图片不失真)else if(rate == null && widthdist > 0 && heightdist == 0){// 获取文件高度和宽度int[] results = getImgWidth(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {rate = (float)(widthdist * 1.0 / results[0]);heightdist = (int) (results[1] * rate);}}else if(rate == null && widthdist == 0 && heightdist > 0){// 获取文件高度和宽度int[] results = getImgWidth(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {rate = (float)(heightdist * 1.0 / results[1]);widthdist = (int) (results[0] * rate);}}// 开始读取文件并进行压缩Image src = ImageIO.read(srcfile);BufferedImage tag = new BufferedImage((int) widthdist,(int) heightdist, BufferedImage.TYPE_INT_RGB);tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist,Image.SCALE_SMOOTH), 0, 0, null);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(tag);} catch (IOException ex) {ex.printStackTrace();}}/*** 采用指定宽度、高度或压缩比例 的方式对图片进行压缩* like12 modified,20220615,支持指定宽/高(高/宽自适应-使图片不失真)** @param imgsrc 源图片地址* @param imgdist 目标图片地址* @param widthdist 压缩后图片宽度(当rate==null时,必传)* @param heightdist 压缩后图片高度(当rate==null时,必传)* @param rate 压缩比例*/public static void compressImg(String imgsrc, String imgdist, int widthdist,int heightdist, Float rate) {try {File srcfile = new File(imgsrc);// 检查文件是否存在if (!srcfile.exists()) {return;}// 如果rate不为空说明是按比例压缩if (rate != null && rate > 0) {// 获取文件高度和宽度int[] results = getImgWidth(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {widthdist = (int) (results[0] * rate);heightdist = (int) (results[1] * rate);}}//like12 modified,20220615,支持指定宽/高(高/宽自适应-使图片不失真)else if(rate == null && widthdist > 0 && heightdist == 0){// 获取文件高度和宽度int[] results = getImgWidth(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {rate = (float)(widthdist * 1.0 / results[0]);heightdist = (int) (results[1] * rate);}}else if(rate == null && widthdist == 0 && heightdist > 0){// 获取文件高度和宽度int[] results = getImgWidth(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {rate = (float)(heightdist * 1.0 / results[1]);widthdist = (int) (results[0] * rate);}}// 开始读取文件并进行压缩Image src = ImageIO.read(srcfile);BufferedImage tag = new BufferedImage((int) widthdist,(int) heightdist, BufferedImage.TYPE_INT_RGB);tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist,Image.SCALE_SMOOTH), 0, 0, null);FileOutputStream out = new FileOutputStream(imgdist);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(tag);out.close();} catch (IOException ex) {ex.printStackTrace();}}/*** 获取图片宽度* * @param file*            图片文件* @return 宽度*/public static int[] getImgWidth(File file) {InputStream is = null;BufferedImage src = null;int result[] = { 0, 0 };try {is = new FileInputStream(file);src = ImageIO.read(is);result[0] = src.getWidth(null); // 得到源图宽result[1] = src.getHeight(null); // 得到源图高is.close();} catch (Exception e) {e.printStackTrace();}return result;}/*** 获取图片大小 及 尺寸(测试)* @param filePath* @return* @throws FileNotFoundException* @throws IOException*/public static Float getImgWidthTest(String filePath) throws FileNotFoundException, IOException {//图片大小(文件大小)File picture = new File(filePath);Float size = Float.parseFloat(String.format("%.1f",picture.length() / 1024.0 / 1024.0));System.out.println("图片大小:" + size + "MB");//图片尺寸BufferedImage sourceImg  = ImageIO.read(new FileInputStream(picture));System.out.println("宽:" + sourceImg.getWidth());System.out.println("高:" + sourceImg.getHeight());return size;}public static void main(String[] args) throws FileNotFoundException, IOException {System.out.println("图片压缩测试...");/*//获取图片大小CompressImgUtil.getImgWidthTest("D:/test.jpg");*///图片压缩String srcFile = "D://test.jpg";String destFile = "D://tempCompressImg.jpg";//String destFile = "D://test.jpg";//相同路径可以覆盖File srcfile = new File(srcFile);System.out.println("压缩前srcfile size:" + srcfile.length());//压缩//CompressImgUtil.compressImg(srcFile, destFile, 600, 800, null);//CompressImgUtil.compressImg(srcFile, destFile, 110, 130, null);//CompressImgUtil.compressImg(srcFile, destFile, 110, 0, null);//CompressImgUtil.compressImg(srcFile, destFile, 0, 130, null);CompressImgUtil.compressImg(srcFile, destFile, 0, 0, Float.parseFloat("0.5"));File distfile = new File(destFile);System.out.println("压缩后distfile size:" + distfile.length());System.out.println("Finish!");}
}

Java获取图片大小 及 尺寸 图片压缩 jpg压缩相关推荐

  1. Python PIL调整图片大小、尺寸和转换图片格式,removebg改变图片背景、透明化处理

    1.简介:Python利用PIL Image可以调整图片尺寸(宽度和高度).图片大小和转换图片格式,Python利用removebg可以改变图片背景.透明化处理. 2.特点:简单方便.快速. 3.适用 ...

  2. java 获取gif帧数_Java图片处理之获取gif图一帧图片的两种方法

    前言 本文主要给大家介绍了关于Java获取gif图一帧图片的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.Java原生代码实现gif获取一帧图片 先看测试代码: pu ...

  3. JAVA改变图片大小,将图片改为Jpg格式

    JAVA改变图片大小,将图片改为Jpg格式 package util;import javax.imageio.ImageIO; import java.awt.*; import java.awt. ...

  4. 视频直播源码,插入图片、删除图片、设置图片大小、提取图片

    视频直播源码,插入图片.删除图片.设置图片大小.提取图片 1.插入图片 Document对象有一个add_paragraph()方法插入图片,只需要传入路径或者字节流即可,实际上它也是调用段落的Run ...

  5. jquery实现上传图片及图片大小验证、图片预览效果代码

    jquery实现上传图片及图片大小验证.图片预览效果代码 jquery实现上传图片及图片大小验证.图片预览效果代码 上传图片验证 */ function submit_upload_picture() ...

  6. 图片大小自动按比例缩小图片不变形 解决方法

    图片大小自动按比例缩小图片不变形 解决方法 参考文章: (1)图片大小自动按比例缩小图片不变形 解决方法 (2)https://www.cnblogs.com/liujunchen/p/7598649 ...

  7. java验证图片大小_java 校验图片的大小、尺寸、比例

    import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.i ...

  8. Java调整图片大小合并PNG图片生成ICON(保持背景透明)

    1.重新调整图片到合适尺寸(有压缩图片功能) /*** * 功能描述: <br>* 〈调整图像到固定大小〉** @param srcImageFile 源图像文件地址* @param de ...

  9. 如何改变图片大小kb?图片尺寸怎么在线修改?

    随着现在拍摄设备的像素越来越高,图片越来越清楚也就让图片的体积越来越大,在使用这些图片素材的时候就经常会遇到图片太大无法发送或者上传的情况,那么这时候应该怎么缩小图片的大小kb呢?今天来教给大家一个图 ...

  10. php如何让图片铺满屏幕,如何解决js获取屏幕大小并且让图片自适应的方法

    在写h5页面的时候,经常会需要将图片自适应大小,一般都是用等比例的缩放,这就有个问题,当上传的图片不是一个规格时就会出现展示图片不完美. 为了解决这个问题,我们可以通过js去获取图片的大小,然后在根据 ...

最新文章

  1. Objective-C 入门(七)协议 protocol(JAVA中的接口)
  2. java 连接 postgresql_java如何连接数据库并对其操作(以PostgreSQL为例)
  3. SpringMVC解决跨域的两种方案
  4. springcloud 之服务注册与发现 Eureka Client
  5. netcore一键部署到linux服务器以服务方式后台运行
  6. Pygal简单使用——模拟掷骰子
  7. ubuntu 在vm中如何上网及注意问题
  8. 7个示例科普CPU Cache(转)
  9. Java本质论之关于Java栈与堆的思考
  10. 混沌神经网络的实际应用,神经网络求解优化问题
  11. 计算机笔记本摄像头无法使用,笔记本摄像头不能用怎么回事 笔记本摄像头不能用解决方法...
  12. illustrator插件开发向导--基础入门(二)--插件定义--PiPL资源--插件管理--插件入口和消息--加载和卸载--启动和关闭
  13. matlab怎么定义矩阵变量_MATLAB符号计算(收藏版)
  14. 一款json查询操作神器
  15. SQL 中的注释语句
  16. 罕见水星凌日直播,QQ物联携手腾讯云带你连接宇宙
  17. 面渣逆袭:MySQL六十六问,两万字+五十图详解
  18. 张首晟:区块链技术是互联网世界新的分合转折点
  19. Android 性能优化必知必会
  20. 宝塔面板安装docker挂网心云

热门文章

  1. 如何免费将XPS转成PDF格式
  2. 微信公众号支付 java_微信支付之公众号支付(java实现)
  3. pandoc如何使用自定义样式导出docx文档
  4. matlab同时画n多条曲线,设置颜色及图例
  5. 大数据下无隐私APP为何要用户摄像头麦克风通讯录等全权限才服务(公号回复“无隐私APP”下载PDF彩标典藏版资料,欢迎转发赞赏)
  6. vba字典重复key_VBA字典技术整理
  7. Vue 子组件与父组件之间传值
  8. 如何将明细数据自动分类生成汇总报表
  9. 8.0高等数学五-斯托克斯公式
  10. 不同超声诊断仪器的原理和FPGA在超声中应用