1.情景展示

  在调用腾讯身份证OCR接口的时候,由于要求图片大小只能限制在1MB以内,这样,就必须使用到图片压缩技术

2.代码展示

/**
* 图片处理工具类
* @explain
* @author Marydon
* @creationTime 2019年9月3日上午10:14:17
* @version 1.0
* @since
* @email marydon20170307@163.com
*/
public class ImgUtils {
/**
* 压缩图片(通过降低图片质量)
* @explain 压缩图片,通过压缩图片质量,保持原图大小
* @param quality
* 图片质量(0-1)
* @return byte[]
* 压缩后的图片(jpg)
* @throws
*/
public static byte[] compressPicByQuality(byte[] imgByte, float quality) {
byte[] imgBytes = null;
try {
ByteArrayInputStream byteInput = new ByteArrayInputStream(imgByte);
BufferedImage image = ImageIO.read(byteInput); // 如果图片空,返回空
if (image == null) {
return null;
}
// 得到指定Format图片的writer(迭代器)
Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpeg");
// 得到writer
ImageWriter writer = (ImageWriter) iter.next();
// 得到指定writer的输出参数设置(ImageWriteParam )
ImageWriteParam iwp = writer.getDefaultWriteParam();
// 设置可否压缩
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
// 设置压缩质量参数
iwp.setCompressionQuality(quality); iwp.setProgressiveMode(ImageWriteParam.MODE_DISABLED); ColorModel colorModel = ColorModel.getRGBdefault();
// 指定压缩时使用的色彩模式
iwp.setDestinationType(
new javax.imageio.ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(16, 16))); // 开始打包图片,写入byte[]
// 取得内存输出流
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
IIOImage iIamge = new IIOImage(image, null, null); // 此处因为ImageWriter中用来接收write信息的output要求必须是ImageOutput
// 通过ImageIo中的静态方法,得到byteArrayOutputStream的ImageOutput
writer.setOutput(ImageIO.createImageOutputStream(byteArrayOutputStream));
writer.write(null, iIamge, iwp);
imgBytes = byteArrayOutputStream.toByteArray();
} catch (IOException e) {
System.out.println("write errro");
e.printStackTrace();
}
return imgBytes;
}
}

3.其它代码

  import org.apache.commons.codec.binary.Base64;

String imgBase64 = "";
try {
// 图片大小超过1MB
if (file.getSize()/1024 > 1024) {
byte[] imgBytes = ImgUtils.compressPicByQuality(file.getBytes(),0.1F);
imgBase64 = Base64.encodeBase64String(imgBytes);
} else {
imgBase64 = Base64.encodeBase64String(file.getBytes());
}
} catch (IOException e1) {
e1.printStackTrace();
}

  说明:

  生成的base64图片没有图片格式头,即:data:image/jpeg;base64,

4.增加前端代码

/**
* 拍照或选择图片
*/
this.uploadPicture = function () {
// js 获取文件对象
var fileObj = document.getElementById("file").files[0];
if (null == fileObj) {
alert("图像上传失败,请重试!");
}
// TODO 显示遮罩 // 创建form表单
var formFile = new FormData();
//加入文件对象
formFile.append("file", fileObj);
// 创建XMLHttpRequest 对象
var xhr = new XMLHttpRequest();
xhr.open("post", baseUrl + "/weixin/facein/upImg3.do", true);
xhr.onload = function () {
var resData = JSON.parse(this.responseText)
// 将返回数据转换成JSON对象
var json = eval('(' + resData.data2 + ')');
// 身份证识别成功
if (json.ret == 0) {
// TODO 将所需数据填充到页面 } else {
alert("识别失败,请重试!" + json.msg);
}
document.getElementById("file").value = "";
// TODO 隐藏遮罩
};
// 调用腾讯接口
xhr.send(formFile);
};

  

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

相关推荐:

 

java 压缩图片(只缩小体积,不更改图片尺寸)的更多相关文章

  1. js 压缩图片(只缩小体积,不更改图片尺寸)

      1.情景展示 如上图所示,点击上传图片按钮,调用手机摄像头拍照功能. <input onchange="javascript:imgFun.uploadPicture();&quo ...

  2. Java压缩图片

    阅读目录 前言 压缩的要求 实现 优点 其他功能 前言 作为靠谱的java服务端程序员,图片这个事情一直是个头疼的事情. 现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的 ...

  3. Qt 显示图片 放大 缩小 移动(都是QT直接提供的功能)

    本文章原创于www.yafeilinux.com 转载请注明出处. 现在我们来实现在窗口上显示图片,并学习怎样将图片进行平移,缩放,旋转和扭曲.这里我们是利用QPixmap类来实现图片显示的. 一.利 ...

  4. 【转】mysql保存图片技术决定:保存二进制文件还是只保存图片相对路径,图片放在硬盘上面?

    最近遇到上面这个问题,一开始我就果断否决了数据库保存图片的策略,主要是太蠢!事实上我的决定是正确的,我仅仅理解为mysql读写性能提高的境界,具体为什么可以提高?很模糊,知道我看到了这里: 大佬做的实 ...

  5. iOS:图片上传时两种图片压缩方式的比较

    上传图片不全面的想法:把图片保存到本地,然后把图片的路径上传到服务器,最后又由服务器把路径返回,这种方式不具有扩展性,如果用户换了手机,那么新手机的沙盒中就没有服务器返回的图片路径了,此时就无法获取之 ...

  6. 使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器

    使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器 ajax上传主要使用了 var reader = new FileReader() 此方法 js图片压缩主要是利用canvas进 ...

  7. Java 设置PDF文档背景——单色背景、图片背景

    一般生成的PDF文档默认的文档底色为白色,我们可以通过一定方法来更改文档的背景色,以达到文档美化的作用. 以下内容提供了Java编程来设置PDF背景色的方法.包括2种设置方法: 设置纯色背景色 设置图 ...

  8. javascript仿新浪微博图片放大缩小及旋转效果

    javascript仿新浪微博图片放大缩小及旋转效果 经常看到新浪微博里有图片放大缩小旋转效果,感觉效果还不错,所以就想试着做一个类似的demo出来,至于旋转对于IE可以用滤镜来解决,标准的浏览器可以 ...

  9. C# 压缩图片到指定宽度,假如图片小于指定宽度 判断图片大小是否大于指定大小(KB) 如果大于则压缩图片质量 宽高不变

    class Program { static void Main(string[] args) {//G:\zhyue\backup\projects\Test\ConsoleApplication1 ...

随机推荐

  1. history路由模式下的nginx配置

    路由模式 众所周知,浏览器下的单页面应用的路由模式有下面两种: hash 模式和 history 模式.hash 模式通用性好,而且不依赖服务器的配置,省心省力,但是缺点是不够优雅.相比于 hash ...

  2. 【BZOJ3328】PYXFIB(单位根反演,矩阵快速幂)

    [BZOJ3328]PYXFIB(单位根反演,矩阵快速幂) 题面 BZOJ 题解 首先要求的式子是:\(\displaystyle \sum_{i=0}^n [k|i]{n\choose i}f_i\ ...

  3. php 获取一张图片所有点的颜色值,感觉不错转载学习

    片段一 //similar_text($numStr, $val, $pre); //计算两个字符串的相似度 //print_r($pre); $imgPath = 'time.jpg'; $size ...

  4. C# Moq

    Moq 1 My Cases 1.1 简单入门 2 Reference 2.1 Methods 2.2 Matching Arguments 2.3 Properties 2.4 Events 2.5 ...

  5. Windows下分布式环境搭建以及简单测试

    环境配置: 解压文件: Nginx服务器和Tomcat服务器 Tomcat服务器配置:(conf/server.xml) Nginx配置:(conf/nginx.conf) 安装memcached H ...

  6. vim编辑器-Linux从入门到精通第四天(非原创)

    文章大纲 一.vi介绍二.vim三种模式(重点)三.命令模式四.模式间的切换(重点)五.末行模式六.编辑模式七.实用功能八.扩展九.学习资料下载十.参考文章   一.vi介绍 Vi编辑器是所有Unix ...

  7. Hyper-v,装XP的时候没有驱动上不了网,装这个集成服务(vmguest.iso )就可以了

    Win10自带的Hyper-v,装XP的时候没有驱动上不了网,装这个集成服务(vmguest.iso )就可以了 安装后无法识别显卡及网卡设备,不能与虚拟网络通讯,设备管理器中显示三个未知设备. 在X ...

  8. Linux上搭建SVN服务

    环境:centos7 一.搭建svn服务 1. 安装svn yum -y install subversion 2. 创建一个目录作为svn服务的地址(svn://192.168.0.2:3690 访 ...

  9. Flask 中内置的 Session 应用

    目录 1.Flask 中 session 是需要 secret_key 的 2.session抛异常 3.session 用法: 4.验证session Flask中的Session非常的奇怪,他会将 ...

  10. shell中sort用法

    1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出. [rocrocket@rocrocket progr ...