Jav文件压缩-InputStream转化为base64-Base64解码并生成图片

直接上源码,解释见文章尾部

 package com.hs.common.util.imgecode;

 import com.hs.common.util.Logger;
import net.coobird.thumbnailator.Thumbnails;
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder; import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*; public class ImageEncodeUtil {
private final static Logger logger = Logger.getLogger(ImageEncodeUtil.class); //1-压缩图片
public static InputStream compressFile(InputStream input) throws IOException {
//1-压缩图片
BufferedImage bufImg = ImageIO.read(input);// 把图片读入到内存中
bufImg = Thumbnails.of(bufImg).width(100).keepAspectRatio(true).outputQuality(0.2f).asBufferedImage();//压缩:宽度100px,长度自适应;质量压缩到0.1
ByteArrayOutputStream bos = new ByteArrayOutputStream();// 存储图片文件byte数组
ImageIO.write(bufImg, "jpg", bos); // 图片写入到 ImageOutputStream
input = new ByteArrayInputStream(bos.toByteArray());
int available = input.available();
//2-如果大小超过50KB,继续压缩
if(available > 50000){
compressFile(input);
}
return input; }
//2-InputStream转化为base64
public static String getBase64FromInputStream(InputStream in) {
// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
byte[] data = null;
// 读取图片字节数组
try {
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = in.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
data = swapStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
String str = new String(Base64.encodeBase64(data));
System.out.println( "str length: " + str.length() + " str: " + str);
return str;
} //3-Base64解码并生成图片
public static boolean GenerateImage(String base64str,String savepath) { //对字节数组字符串进行Base64解码并生成图片
if (base64str == null) //图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try {
//Base64解码
byte[] b = decoder.decodeBuffer(base64str);
// System.out.println("解码完成");
70 for (int i = 0; i < b.length; ++i) {
71 if (b[i] < 0) {//调整异常数据(这一步很重要)
72 b[i] += 256;
73 }
74 }
//生成jpeg图片
OutputStream out = new FileOutputStream(savepath);
out.write(b);
out.flush();
out.close();
return true;
} catch (Exception e) {
return false;
}
} public static void main(String[] args) {
try {
File file = new File("C:\\Users\\tyj\\Desktop\\01.jpg");
FileInputStream fileInputStream = new FileInputStream(file);
InputStream inputStream = compressFile(fileInputStream);
String base64FromInputStream = getBase64FromInputStream(inputStream);
GenerateImage(base64FromInputStream,"C:\\\\Users\\\\tyj\\\\Desktop\\\\113001.jpg");
InputStream is =new ByteArrayInputStream(base64FromInputStream.getBytes("UTF-8"));
System.out.println("compress success");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

1.图片压缩使用谷歌thumbnailator,详情可参考:https://www.cnblogs.com/ken-jl/p/8847567.html

        <!-- 谷歌图片压缩 -->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>

2-InputStream转化为base64

3-Base64解码并生成图片,注意其中的标红部分,调整异常数据(这一步很重要)

项目总结13:Jav文件压缩-InputStream转化为base64-Base64解码并生成图片的更多相关文章

  1. 文件压缩小项目haffman压缩

    文件压缩的原理: 文件压缩总体可以分为有损压缩和无损压缩两类,有损压缩是指对mp3等格式的文件,忽略一些无关紧要的信息,只保留一些关键的信息,但并不因此影响用户对于这些mp3格式文件的体验度,无损压缩 ...

  2. 3D性能优化 | 说一说glTF文件压缩

    引言 最近做T级互动,需要使用到3D模型.相信大家和我一样,在开始着手的时候,一定会有这么些问题: 1.如何选择3D模型的导出格式 2.如何对模型文件进行优化 3.在大流量的项目中兼容性怎么样 让我们 ...

  3. Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)

    1.写入Excel,并加密压缩.不保存文件 String dcxh = String.format("%03d", keyValue); String folderFileName ...

  4. Java实现文件压缩与解压

    Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例.(转载自http://www.puiedu. ...

  5. 下载zip格式文件(压缩Excel文件为zip格式)

    Mongodb配置文件参考这一篇:http://www.cnblogs.com/byteworld/p/5913061.html package util; import java.io.Buffer ...

  6. 关于ZIP大文件压缩

    实测:4.76 GB一个单文件压缩没有什么问题. import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

  7. Java实现文件压缩与解压[zip格式,gzip格式]

    Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例. zip扮演着归档和压缩两个角色:gzip并 ...

  8. Webpack 2 视频教程 015 - Webpack 2 中的文件压缩

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  9. 用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载

    用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载,将一个完整的项目进行展示,主要有以下几个部分: 1.servlet部分   Export 2.工具类:TxtFileU ...

随机推荐

  1. js乱码问题解决

    乱码有可能出现在下面两种情况 1.高级浏览器直接访问js路径 2.jsp引用js 针对上述两种情况的解决方式: 1.查看设置浏览器的字符集 2.查看web服务器的字符集,比如Tomcat 配置UTF- ...

  2. eclipse,import,导入项目显示红色叹号

    [场景]eclipse导入项目后,该项目出现红色叹号.打开类文件,会有无数的“The type ... cannot be resolved.”等稀奇古怪的编译错误. [分析]当前eclipse环境中 ...

  3. python字符串的基本用法

    var1 = "hello word"var2 = "runootab"print var2.capitalize()#首字母大写print (var2.cou ...

  4. Think you can pronounce these 10 words correctly? You might be

    Think you can pronounce these 10 words correctly?  You might be surprised! Share Tweet Share Tagged ...

  5. maven ,添加加密算法 apache commons-codec.jar 包

    在百度搜索commons-codec.jar maven  , http://mvnrepository.com/ 到 maven 库搜索 commons-codec.jar maven .你需要添加 ...

  6. [福大2018高级软工教学]团队Alpha阶段成绩汇总

    一.作业地址: https://edu.cnblogs.com/campus/fzu/AdvancedSoftwareEngineerning2018/homework/2396 https://ed ...

  7. Android 开发进入Linux系统执行命令 2018-5-25 Fri.

    /** * 进入linux cmd执行命令 * * @param command * @return */ private boolean runRootCommand(String command) ...

  8. 简单全局HOOK拦截大部分键盘消息

    前言:学习HOOK中,万一老师讲解HOOK入门教程:http://www.cnblogs.com/del/category/124150.html http://www.cnblogs.com/del ...

  9. servlet(1)request常用方法

    HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息. req ...

  10. 解决ngui挡住粒子的问题

    using UnityEngine; using System.Collections; [ExecuteInEditMode] public class ControlParticle : Mono ...