压缩图片大小(Java源码)
/**
*
* 直接指定压缩后的宽高:
* @param oldFile
* 要进行压缩的文件
* @param width
* 压缩后的宽度
* @param height
* 压缩后的高度
* @return 返回压缩后的文件的全路径
*/ public static File zipImageFile(File oldFile, int width, int height) { if (oldFile == null) {
return null;
}
File newImage = null;
try {
/** 对服务器上的临时文件进行处理 */
Image srcFile = ImageIO.read(oldFile);
/** 宽,高设定 */
BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null); /** 压缩后的文件名 可以再自定义 */
newImage = oldFile; /** 压缩之后临时存放位置 */
FileOutputStream out = new FileOutputStream(newImage);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag); /** 压缩质量 */ jep.setQuality(90, true);
encoder.encode(tag, jep);
out.close(); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return newImage; }
/**
* 方法描述 上传图片
*/
public void uploadImage() {
long beginTime = System.currentTimeMillis();
HttpServletResponse response = ServletActionContext.getResponse();
try { response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("utf-8");
ResultMsg msg = new ResultMsg();
FileInputStream fis = null;
OutputStream outputStream = null;
try {
String tempPath = "/upload/wechatshake/"+ getUserInfoSession().getAccount()+ "/";
// 生成上传文件
String path = ServletActionContext.getServletContext().getRealPath(tempPath)+"/"; File dir = new File(path);
if (!dir.exists()) {// 判断目录是否存在,否则创建
dir.mkdirs();
}
File file = ImageUtil.zipImageFile(getImage(),140,140); //压缩图片 if (file != null) {
Random random = new Random();
String saveUploadFileName = "upload"
+ System.currentTimeMillis()+ random.nextInt(1000)
+ imageFileName.substring(imageFileName.lastIndexOf("."),imageFileName.length()); fis = new FileInputStream(file);
outputStream = new FileOutputStream(new File(path,saveUploadFileName));
//byte[] buffer = new byte[1024];
int len = 0;
while ((len=fis.read())!=-1) {
outputStream.write(len);
}
//将图片上传到微信端
UserInfoWechat userInfoWechat = iUserInfoWechatServic.getByUser(getUserInfoSession().getId());
String token = iWeixinService.getAccessToken(userInfoWechat);
Material material = new Material();
material.setType("icon");
material.setMedia(tempPath+saveUploadFileName);
material = iWxActivityService.uploadMaterial(material, token);
logger.info("上传图片微信接口返回数据:"+material);
if(null != material){
List<String> list = new ArrayList<String>();
list.add(material.getData().getPic_url());
msg.setDataList(list);
msg.setCode("0");
}else {
msg.setCode("1");
msg.setDesc("发布失败");
}
msg.setDesc(SUCCESS);
} } catch (Exception e) {
error("上传文件失败", e);
msg.setCode("1");
msg.setDesc(ERROR);
} finally {
try {
if(fis!=null){fis.close();}
if(outputStream!=null){outputStream.close();}
} catch (IOException e) {
e.printStackTrace();
}
writeResult(msg);
}
} catch (Exception e) {
error("上传文件失败", e);
} finally {
printTime(beginTime, getClass(), "uploadImage");
}
}
压缩图片大小(Java源码)的更多相关文章
- Java源码解读(一)——HashMap
HashMap作为常用的一种数据结构,阅读源码去了解其底层的实现是十分有必要的.在这里也分享自己阅读源码遇到的困难以及自己的思考. HashMap的源码介绍已经有许许多多的博客,这里只记录了一些我看源 ...
- 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法
注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...
- JVM之---Java源码编译机制
Sun JDK中采用javac将Java源码编译为class文件,这个过程包含三个步骤: 1.分析和输入到符号表(Parse and Enter) Parse过程所做的工作有词法和语法分 ...
- 分享知识-快乐自己:FastDFS 上传 java 源码
FastDFS 上传 java 源码:点我下载源码 首先导入 POM 文件:解决 maven 不能下载 fastdfs-client-java JAR <dependency> <g ...
- Java源码系列1——ArrayList
本文简单介绍了 ArrayList,并对扩容,添加,删除操作的源代码做分析.能力有限,欢迎指正. ArrayList是什么? ArrayList 就是数组列表,主要用来装载数据.底层实现是数组 Obj ...
- Java源码系列2——HashMap
HashMap 的源码很多也很复杂,本文只是摘取简单常用的部分代码进行分析.能力有限,欢迎指正. HASH 值的计算 前置知识--位运算 按位异或操作符^:1^1=0, 0^0=0, 1^0=0, 值 ...
- Tika结合Tesseract-OCR 实现光学汉字识别(简体、宋体的识别率百分之百)—附Java源码、测试数据和训练集下载地址
OCR(Optical character recognition) —— 光学字符识别,是图像处理的一个重要分支,中文的识别具有一定挑战性,特别是手写体和草书的识别,是重要和热门的科学研究方向.可 ...
- Java 源码刨析 - HashMap 底层实现原理是什么?JDK8 做了哪些优化?
[基本结构] 在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的: JDK 1.8 之后新增了红黑树的组成结构,当链表大于 8 并且容量大于 64 时,链表结构会转换成红黑树结构,它的 ...
- 如何阅读Java源码 阅读java的真实体会
刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比 ...
随机推荐
- python3 获取当前路径及os.path.dirname的使用
方法一: import sys,os os.getcwd()#然后就可以看见结果了 方法二: import os os.path.dirname(os.path.realpath('__file__' ...
- HDU-3001 TSP+三进制DP
题意:给出一个无向图,每个点不能被经过超过两次,选择一个起点问经过所有点至少一次的最短路径. 解法:注意此题是每个点不能经过超过两次,这和一般的TSP问题不同.但是也没有使得此题变得很复杂,原来的状态 ...
- linux磁盘空间占用分析
df -h # 查看目前磁盘空间占用 cd / # 切换到根目录 du -sh # 查询每个目录占用的大小 lsof | grep delete # 查看当前系统打开文件 # 删除不使用的文件, 如果 ...
- 友善之臂arm9、 smart210监控版本,烧写系统
第一次接触嵌入式开发,就拿210练手了,第一天折腾,先烧系统. 准备:板子,8GB或者以上的SD卡,网上找下minitools以及系统小红帽,Android或者ubuntu,debian都可以.[ub ...
- Cesium指南针
cesium里面没有指南针 需要安装其他的插件: cesium-navigation-es6 npm i cesium-navigation-es6 -S 安装好之后在mainjs里引入 import ...
- Jmeter实现百分比业务比例
Jmeter实现百分比业务比例 相较于LoadRunner,jmeter在复杂场景方式貌似略有欠缺.前一段时间,想实现一个功能,如有两个采样器a与b,a采样器与b采样器被执行的概率分别为1/4与3 ...
- Fatal error: Call to a member function on a non-object 的2种解决办法
这两天被一个莫名其妙的错误:Fatal error: Call to a member function on a non-object in d://www/htdocs/inc.php 77 搞 ...
- 【文件分层】/var/run
/var/run是干什么用的 根据linux的文件系统分层结构标准(FHS)中的定义: /var/run 目录中存放的是自系统启动以来描述系统信息的文件. 比较常见的用途是daemon进程将自己的pi ...
- bzoj1211树的计数 x bzoj1005明明的烦恼 题解(Prufer序列)
1211: [HNOI2004]树的计数 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3432 Solved: 1295[Submit][Stat ...
- appium 定位弹出框时报错
今天在做APP自动化时,发现定位弹出框无法定位,无奈,百度去找.发现了一篇不错的博客,故转载过来,供大家参考.后续会验证这个方法的可行性. 本博客转自:http://blog.csdn.net/qq7 ...