问题描述:怎样快速获取一个20MB图片的分辨率?

程序代码:

  1 package test;
  2
  3 import java.awt.Dimension;
  4 import java.awt.image.BufferedImage;
  5 import java.io.File;
  6 import java.io.IOException;
  7 import java.util.Iterator;
  8 import javax.imageio.ImageIO;
  9 import javax.imageio.ImageReader;
 10 import javax.imageio.stream.FileImageInputStream;
 11 import javax.imageio.stream.ImageInputStream;
 12
 13 /**
 14  * 读取大图片的分辨率
 15  *
 16  * @author 远方bruce
 17  *
 18  */
 19 public class ReadResolution {
 20     /**
 21      * 通过BufferedImage获取
 22      * @param file 文件
 23      * @return 图片的分辨率
 24      * @throws IOException
 25      */
 26     public static String getResolution1(File file) throws IOException {
 27         BufferedImage image = ImageIO.read(file);
 28         return image.getWidth() + "x" + image.getHeight();
 29     }
 30
 31     /**
 32      * 获取图片的分辨率
 33      *
 34      * @param path
 35      * @return
 36      */
 37     public static Dimension getImageDim(String path) {
 38         Dimension result = null;
 39         String suffix = getFileSuffix(path);
 40         //解码具有给定后缀的文件
 41         Iterator<ImageReader> iter = ImageIO.getImageReadersBySuffix(suffix);
 42         System.out.println(ImageIO.getImageReadersBySuffix(suffix));
 43         if (iter.hasNext()) {
 44             ImageReader reader = iter.next();
 45             try {
 46                 ImageInputStream stream = new FileImageInputStream(new File(
 47                         path));
 48                 reader.setInput(stream);
 49                 int width = reader.getWidth(reader.getMinIndex());
 50                 int height = reader.getHeight(reader.getMinIndex());
 51                 result = new Dimension(width, height);
 52             } catch (IOException e) {
 53                 e.printStackTrace();
 54             } finally {
 55                 reader.dispose();
 56             }
 57         }
 58         System.out.println("getImageDim:" + result);
 59         return result;
 60     }
 61
 62     /**
 63      * 获得图片的后缀名
 64      * @param path
 65      * @return
 66      */
 67     private static String getFileSuffix(final String path) {
 68         String result = null;
 69         if (path != null) {
 70             result = "";
 71             if (path.lastIndexOf('.') != -1) {
 72                 result = path.substring(path.lastIndexOf('.'));
 73                 if (result.startsWith(".")) {
 74                     result = result.substring(1);
 75                 }
 76             }
 77         }
 78         System.out.println("getFileSuffix:" + result);
 79         return result;
 80     }
 81
 82     /**
 83      * 截取Dimension对象获得分辨率
 84      * @param path
 85      *
 86      * @return
 87      */
 88     public static String getResolution2(String path) {
 89         String s = getImageDim(path).toString();
 90         s = s.substring(s.indexOf("[") + 1, s.indexOf("]"));
 91         String w = s.substring(s.indexOf("=") + 1, s.indexOf(","));
 92         String h = s.substring(s.lastIndexOf("=") + 1);
 93         String result = w + " x " + h;
 94         System.out.println("getResolution:" + result);
 95         return result;
 96     }
 97
 98     /**
 99      * 测试
100      *
101      * @param args
102      * @throws IOException
103      */
104     public static void main(String[] args) throws IOException {
105         String path = "d:\\abc.JPG";
106         File file = new File(path);
107         System.out.println("第1种方法使用的时间:");
108         long s1 = System.currentTimeMillis();
109         System.out.println(getResolution1(file));
110         long l1 = System.currentTimeMillis();
111         System.out.println((l1 - s1)+"ms");
112         System.out.println("******************************");
113         System.out.println("第2种方法使用的时间:");
114         long s2 = System.currentTimeMillis();
115         getResolution2(path);
116         long l2 = System.currentTimeMillis();
117         System.out.println((l2 - s2)+"ms");
118     }
119 }

运行结果:
第1种方法使用的时间:
11935x8554
4867ms
******************************
第2种方法使用的时间:
getFileSuffix:JPG
javax.imageio.ImageIO$ImageReaderIterator@11ddcde
getImageDim:java.awt.Dimension[width=11935,height=8554]
getResolution:11935 x 8554
0ms

注意:由于第一种方法是将图片一次性读入内存所以需要设置JVM的运行内存,具体方法是run图标下拉-》Run Configurations-》VM arguments填入

-Xms256m -Xmx1024m

解释:Dimension类封装单个对象中组件的宽度和高度(精确到整数)。ImageIO类包含一些用来查找 ImageReaderImageWriter
以及执行简单编码和解码的静态便捷方法。ImageReader用来解析和解码图像的抽象超类。

转载于:https://www.cnblogs.com/bruceliang/p/3383431.html

java快速获取大图片的分辨率(大图片格式JPG,tiff ,eg)相关推荐

  1. JAVA快速获取网络图片或者URL图片并保存到本地

    JAVA快速获取网络图片或者URL图片并保存到本地,直接上代码: import java.io.ByteArrayOutputStream; import java.io.File; import j ...

  2. 快速获取一个网站的所有资源,图片,html,css,js......扒站,仿站必备工具

    今天介绍一款软件,可以快速获取一个网站的所有资源,图片,html,css,js...... 以获取某车官网为例 我来展示一下这个软件的功能. 输入网站地址和网站要保存的文件夹 如果网站名称后我们可以扫 ...

  3. (十)老照片修复、图像超分、图片提高分辨率、图片高清化、图片清晰化、黑白图片上色、人脸祛斑、美颜、人体瘦身、图像去噪、人像抠图、批量处理、视频提高分辨率、视频逐帧修复

    (十)老照片修复.图像超分.图片提高分辨率.图片高清化.图片清晰化.黑白图片上色.人脸祛斑.美颜.人体瘦身.图像去噪.人像抠图.批量处理.视频提高分辨率.视频逐帧修复 本文的代码的功能是:可以对图片文 ...

  4. ps 修改图片大小(分辨率)(png图片)

    很简单,通常是将分辨率大的改成分辨率小的 之前用美图秀秀在修改图片,将分辨率大的改小后 发现小图会有阴影,于是没办法就下了ps,还是ps好用些. 步骤 1.用ps打开需要修改的图片 2.选择图像,修改 ...

  5. 怎么改图片的分辨率?图片分辨率怎么调高?

    我们从网上下载下来的图片,很多都不是很清晰,这是因为图片分辨率不够高造成的,所以如何通过改图片分辨率来提高画质呢?其实图片修改分辨率(https://www.yasuotu.com/dpi)的方法有很 ...

  6. Java爬虫获取网页视频,音乐,图片等

    如何使用Java写爬虫来获取网页视频 方法1对于没有反爬虫机制(不多说直接上代码) @SuppressWarnings("all") public String getVideo( ...

  7. Java:获取系统时间,并自定义时间格式

    前言 系统时间获取经常被用来存储和排错,其格式完全可以按照自己喜好改变 1.先贴代码再讲解 import java.text.SimpleDateFormat; import java.util.Ca ...

  8. java提取word中的图片_Java怎么获取Word批注的文字和图片

    Java怎么获取Word批注的文字和图片 发布时间:2020-06-23 11:07:08 来源:亿速云 阅读:119 作者:Leah 这篇文章将为大家详细讲解有关Java获取Word批注的文字和图片 ...

  9. cdr文件过大导出pdf打不开_PDF快速导出JPG对应的分辨率技巧

    前言 很多人想将PDF文件转换成JPG文件,却不知道怎么转或者只知道直接另存为jpg文件,也不清楚对应的分辨率点.那我们怎么让PDF文件转换成JPG文件相对应的分辨率? 今天小编给大家分享PDF快速导 ...

最新文章

  1. Python 的一万种用法:制作 Web 可视化页面
  2. 我的世界最新版本生存服务器ip,我的世界服务器古风小阁IP|纯净生存(1.15.2)
  3. 四级嵌入式系统开发工程师-计算题题库
  4. 3.1亿美元融资之后,重估文远知行
  5. Zuul:构建高可用网关之多维度限流
  6. 平衡二叉树(AVL)实现(3)-删除
  7. asp.net mysql 事务_ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)
  8. 从普通JAVA程序员到阿里P8架构师,他用了六年
  9. python关键字与标识符
  10. html和css动画效果,css过渡和css动画的区别是什么?
  11. js html转为实体,字符串js编码转换成实体html编码的方法(防范XSS攻击)
  12. css之左边div固定宽度右边div自适应布局
  13. Gridview 增加多个空行。
  14. smtp、esmtp、pop3命令使用
  15. 微信网页版(在电脑上聊微信)
  16. 为什么说优秀的管理都是自下而上的?
  17. 无线网络-何为ISM频段?
  18. 由 hacked by 1byte 想到的,再说两句
  19. linux 访问windows本地项目异常如何解决,求助
  20. java中不可变对象(immutable object)是什么,有什么意义

热门文章

  1. mysql命令速查手册
  2. 八、操作系统——基本分页存储管理的基本概念(详解)
  3. LeetCode 464. 我能赢吗(状态压缩+记忆化递归 / 博弈)
  4. LeetCode 765. 情侣牵手(贪心)
  5. LeetCode 287. 寻找重复数(BitMap)
  6. LeetCode 47. 全排列 II(回溯+搜索剪枝)
  7. 服务端_说说Netty服务端启动流程
  8. python 画三角函数_python,将三角函数绘制成二维数组
  9. 文本预处理跑得慢?抱抱脸团队又放福利,1GB文本语料分词只需20s!
  10. 如果有一天,小夕不再萌...