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

问题描述:怎样快速获取一个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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言基础知识整理

一、 关于sizeof和strlen。Sizeof&#xff08;&#xff09;用于计算某类型或者某变量在内存中所占空间。比如整数分为short型&#xff0c;int型&#xff0c;long整型&#xff0c;分别占2,2/4,4个字节&#xff0c;int型具体占用几个字节和编译系统有关。我们输入字符串时通常用c…

【2017-2019】Gartner战略技术趋势一览

来源&#xff1a;学术plus 、装备参考近期&#xff0c;Gartner公布了2019年十大战略技术趋势的预测&#xff0c;值此之际&#xff0c;本文总结回顾并简要分析了2017-2019三年的战略趋势变化。Gartner副总裁兼研究员David Cearley指出&#xff1a;在智能、数字、网格三大领域下的…

[wikioi]多源最短路

http://wikioi.com/problem/1077/ Floyd算法。精华是三层循环&#xff0c;if (dist(i,k) dist(k,j) < dist(i,j)) then dist(i,j) dist(i,k) dist(k,j)。 但循环的顺序必须k放在最外层&#xff0c;否则会错&#xff0c;因为有可能赋值给dist(i,j)的dist(i,k)和dist(k,j)都…

目标检测必看——RCNN是怎样融合了分类与回归,CNN与SVM

人和动物的区别之一是人能使用工具&#xff0c;而在人开始使用磨制石器时人类进入新石器时代。在目标检测领域&#xff0c;也有一个划时代的算法&#xff0c;在它之后目标检测开始进入深度学习的时代——它就是今天的主角&#xff1a;R-CNN。在RCNN之后&#xff0c;出现了更多优…

《自然》杂志:面对“电车难题”,不同国家的人有不同的道德选择

来源&#xff1a;36Kr电车难题原本只是一个思想实验。但是无人车的发展却绕不开这个问题。因为机器在无论如何都会撞死人的情况下必须靠预先植入的道德代码做出判断&#xff1a;该牺牲谁&#xff0c;该保谁。但是一项有全球230万人参与的调查表明&#xff1a;这个问题并不存在普…

Mac OS X Terminal 101:终端使用初级教程

文章目录1 为什么要使用命令行/如何开启命令行&#xff1f;2 初识Command Line3 关于 man 命令4 命令行&#xff0c;文件和路径 4.1 两种路径&#xff1a;绝对路径和相对路径4.2 切换到其他路径和目录4.3 处理特殊字符4.4 查看隐藏文件4.5 前往其他卷5 用Command-Line管理文件 …

Fast R-CNN整体把握

RCNN很好地解决了目标检测分类和定位的问题。但是缺点是速度太慢。 原因1&#xff1a;2k个候选区域都要经过变形成统一的正方形才能依次输入CNN进行特征提取。候选区域可能是互相包含的&#xff0c;这就导致原图同一个区域特征的重复提取。 原因2&#xff1a;RCNN的分类和回归…

2万字看完腾讯最纯粹的一届WE大会:从黑洞、虫洞到克隆猴

来源&#xff1a;虎嗅APP腾讯还有梦想&#xff0c;因为腾讯还有WE大会。5年来&#xff0c;腾讯从全世界邀请了几十位难得一见的科学家不远万里来到北京展览馆&#xff0c;比如去年邀请的剑桥大学教授、著名宇宙学家霍金&#xff08;视频演讲&#xff09;&#xff0c;不想成为绝…

深入浅出MongoDB(二)概述

上次的博文深入浅出MongoDB&#xff08;一&#xff09;NoSQL中我们已经简单介绍了一下NoSQL的基本概念&#xff0c;这次我们来了解一下MongoDB的相关概念。 1、简介 MongoDB是一款由C编写的高性能、开源、无模式的常用非关系型数据库产品&#xff0c;是非关系数据库当中功能最…

Fater R-CNN 整体把握

在R-CNN中提到过&#xff0c;候选区域的提取和之后的目标检测其实是独立的&#xff0c;所以我们可以使用任意的算法如SS。Fast-RCNN改进的是目标检测部分&#xff0c;但是其实候选区域的提取也挺费时的&#xff0c;Faster R-CNN就把改进方向放在了这里。 我们已经领略到了CNN的…

马斯克,特斯拉首席小白鼠

来源&#xff1a;量子位伊隆马斯克&#xff0c;比你想的还要激进。作为特斯拉CEO&#xff0c;马斯克经常一边自己坐在Model S上&#xff0c;一边召开电话会议。车辆的驾驶交给Autopilot&#xff0c;也就是那个时不时会出次意外的自动驾驶系统。他这么做不仅仅是想节约时间&…

每天进步一点点:andriod学习从零开始

第一章 前引 滚滚长江东逝水   浪花淘尽英雄   是非成败转头空   青山依旧在   几度夕阳红   白发渔樵江渚上   惯看秋月春风   一壶浊酒喜相逢   古今多少事   都付笑谈中   智能的机操作系统经过多盘厮杀&#xff0c;到现在形成了三足鼎…

windows下caffe+CPUOnly实现MNIST手写分类

工具下载 微软官方移植的Caffe&#xff1a;https://github.com/Microsoft/caffe 对属性表的操作需要把实例属性表的后缀改成vs可用的.props 打开同一个文件夹下的Caffe.sln&#xff0c;查看其中的属性表<CpuOnlyBuild>true</CpuOnlyBuild><UseCuDNN>false<…

Yann LeCun专访:我不觉得自己有天分,但是我一直往聪明人堆里钻

来源&#xff1a;AI 科技评论摘要&#xff1a;纽约大学教授、Facebook 副总裁与首席 AI 科学家 Yann LeCun 由于对深度学习的突出贡献&#xff0c;被誉为深度学习的「三驾马车」之一&#xff0c;更被称为「CNN」之父。Yann LeCun 也一直非常活跃&#xff0c;发论文、教学、创立…

任务分配调整

在经过新一轮分工讨论后&#xff0c;我们将我们最初的分工做了一次更新。截图于此。但是同样&#xff0c;基于敏捷开发的原则&#xff0c;任务将会在过程中为适应遇到的情况而不断更新。 请大家及时完成各自任务&#xff0c;并每天22点之前在tfs上更新完毕&#xff0c;同时将当…

以LeNet-5为例理解CNN

在用caffe实现对MNIST手写数字分类的过程中发现利用的网络是LetNet-5.决定从这个网络入手好好认识一下CNN。 LeNet-5早在1998年就出现了&#xff08;5表示5层模型&#xff09;&#xff0c;标志着CNN的诞生。以其作者YannLeCun的名字命名。但是却没有得到广泛的应用&#xff0c;…

设置IE默认文本模式的方法

设置IE默认文本模式的方法 <meta http-equiv"X-UA-Compatible" content"IE8" /> IE5、6、7等都可以&#xff0c; 如果要让IE浏览器默认以最高级别文本模式显示&#xff0c;设置 IEedge 转载于:https://www.cnblogs.com/wshiqtb/p/3393653.html

任正非最新谈话:直到2006年,我才真正抛弃自杀的念头

来源&#xff1a;世界科技创新论坛摘要&#xff1a;日前&#xff0c;一份任正非会见索尼CEO吉田宪一郎会谈纪要流出&#xff0c;这份纪要以吉田宪一郎发问任正非的视角&#xff0c;揭开了不少华为鲜为人知的故事&#xff0c;其中涉及华为的管理、创业之初的故事&#xff0c;还有…

LeNet网络配置文件 lenet_train_test.prototxt

.prototxt文件 定义了网络的结构&#xff0c;我们可以通过它了解网络是如何设计的&#xff0c;也可以建立属于自己的网络。这种格式来源于Google的Protocol Buffers&#xff0c;后来被开源&#xff0c;主要用于海量数据存储、传输协议格式等场合。https://blog.csdn.net/liuyuz…

现有代码移植到Metro App

现有代码移植到Metro App 一&#xff1a;工程配置 配置WinRT工程时要注意以下几点&#xff1a; 静态库工程General里的“Windows Store App Support”设成trueC\General下面的“Consume Windows Runtime Extension”设成Yes&#xff0c;设置该选项的目的是&#xff1a;引入Micr…