/**
*
* 直接指定压缩后的宽高:
* @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源码)的更多相关文章

  1. Java源码解读(一)——HashMap

    HashMap作为常用的一种数据结构,阅读源码去了解其底层的实现是十分有必要的.在这里也分享自己阅读源码遇到的困难以及自己的思考. HashMap的源码介绍已经有许许多多的博客,这里只记录了一些我看源 ...

  2. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法

    注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...

  3. JVM之---Java源码编译机制

    Sun JDK中采用javac将Java源码编译为class文件,这个过程包含三个步骤:     1.分析和输入到符号表(Parse and Enter)    Parse过程所做的工作有词法和语法分 ...

  4. 分享知识-快乐自己:FastDFS 上传 java 源码

    FastDFS 上传 java 源码:点我下载源码 首先导入 POM 文件:解决 maven 不能下载 fastdfs-client-java JAR <dependency> <g ...

  5. Java源码系列1——ArrayList

    本文简单介绍了 ArrayList,并对扩容,添加,删除操作的源代码做分析.能力有限,欢迎指正. ArrayList是什么? ArrayList 就是数组列表,主要用来装载数据.底层实现是数组 Obj ...

  6. Java源码系列2——HashMap

    HashMap 的源码很多也很复杂,本文只是摘取简单常用的部分代码进行分析.能力有限,欢迎指正. HASH 值的计算 前置知识--位运算 按位异或操作符^:1^1=0, 0^0=0, 1^0=0, 值 ...

  7. Tika结合Tesseract-OCR 实现光学汉字识别(简体、宋体的识别率百分之百)—附Java源码、测试数据和训练集下载地址

     OCR(Optical character recognition) —— 光学字符识别,是图像处理的一个重要分支,中文的识别具有一定挑战性,特别是手写体和草书的识别,是重要和热门的科学研究方向.可 ...

  8. Java 源码刨析 - HashMap 底层实现原理是什么?JDK8 做了哪些优化?

    [基本结构] 在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的: JDK 1.8 之后新增了红黑树的组成结构,当链表大于 8 并且容量大于 64 时,链表结构会转换成红黑树结构,它的 ...

  9. 如何阅读Java源码 阅读java的真实体会

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心.   说到技术基础,我打个比 ...

随机推荐

  1. 洛谷P3979 遥远的国度 树链剖分+分类讨论

    题意:给出一棵树,这棵树每个点有权值,然后有3种操作.操作一:修改树根为rt,操作二:修改u到v路径上点权值为w,操作三:询问以rt为根x子树的最小权值. 解法:如果没有修改树根操作那么这题就是树链剖 ...

  2. 【Luogu】【关卡1-8】BOSS战-入门综合练习2(2017年10月)【AK】------都是基础题

    P1426 小鱼会有危险吗 我个人觉得这个题目出的不好,没说明白,就先只粘贴的AC代码吧 #include <bits/stdc++.h> using namespace std; int ...

  3. PHP ftp_mdtm() 函数

    ftp_mdtm() 函数返回指定文件的最后修改时间. 该函数将以 Unix 时间戳的形式返回文件的最后修改时间,如果出错则返回 -1. 语法 int ftp_mdtm ( resource $ftp ...

  4. delphi 文件夹操作

    文件的拖放和打开拖拽 user shellapi type TForm1 = class(TForm) ListView1: TListView; procedure FormCreate(Sende ...

  5. hive自定义函数UDF UDTF UDAF

    Hive 自定义函数 UDF UDTF UDAF 1.UDF:用户定义(普通)函数,只对单行数值产生作用: UDF只能实现一进一出的操作. 定义udf 计算两个数最小值 public class Mi ...

  6. flutter duplicate symbol '_GetDirectoryOfType' in:

    ld: warning: directory not found for option '-F/Users//codingProject/vipidea-app/ios/Runner/SuperPla ...

  7. GO语言延迟函数defer用法分析

    这篇文章主要介绍了GO语言延迟函数defer用法,较为详细的分析了GO语言的特性与具体用法,并给出了一个比较典型的应用实例,具有一定的参考借鉴价值,需要的朋友可以参考下   本文实例讲述了GO语言延迟 ...

  8. 使用java.util.Properties工具制作自定义访问配置文件信息

    import ch.qos.logback.classic.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; im ...

  9. asp.net core网关Ocelot的简单介绍& Ocelot集成Identity认证

    文章简介  Ocelot网关简介 Ocelot集成Idnetity认证处理 Ocelot网关简介 Ocelot是一个基于netcore实现的API网关,本质是一组按特定顺序排列的中间件.Ocelot内 ...

  10. 20、Linux命令对服务器磁盘进行监控

    服务器磁盘性能测试也是一个比较有意思的过程.首先我们要弄清楚磁盘储存哪些内容,这里推荐鸟哥的私房菜  我们不仅要推算出磁盘什么时候被占满,也要监控磁盘的读写速度.也就是我们常说的 I/O df -h ...