1.情景展示

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

2.代码展示

  1. /**
  2. * 图片处理工具类
  3. * @explain
  4. * @author Marydon
  5. * @creationTime 2019年9月3日上午10:14:17
  6. * @version 1.0
  7. * @since
  8. * @email marydon20170307@163.com
  9. */
  10. public class ImgUtils {
  11. /**
  12. * 压缩图片(通过降低图片质量)
  13. * @explain 压缩图片,通过压缩图片质量,保持原图大小
  14. * @param quality
  15. * 图片质量(0-1)
  16. * @return byte[]
  17. * 压缩后的图片(jpg)
  18. * @throws
  19. */
  20. public static byte[] compressPicByQuality(byte[] imgByte, float quality) {
  21. byte[] imgBytes = null;
  22. try {
  23. ByteArrayInputStream byteInput = new ByteArrayInputStream(imgByte);
  24. BufferedImage image = ImageIO.read(byteInput);
  25.  
  26. // 如果图片空,返回空
  27. if (image == null) {
  28. return null;
  29. }
  30. // 得到指定Format图片的writer(迭代器)
  31. Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpeg");
  32. // 得到writer
  33. ImageWriter writer = (ImageWriter) iter.next();
  34. // 得到指定writer的输出参数设置(ImageWriteParam )
  35. ImageWriteParam iwp = writer.getDefaultWriteParam();
  36. // 设置可否压缩
  37. iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
  38. // 设置压缩质量参数
  39. iwp.setCompressionQuality(quality);
  40.  
  41. iwp.setProgressiveMode(ImageWriteParam.MODE_DISABLED);
  42.  
  43. ColorModel colorModel = ColorModel.getRGBdefault();
  44. // 指定压缩时使用的色彩模式
  45. iwp.setDestinationType(
  46. new javax.imageio.ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(16, 16)));
  47.  
  48. // 开始打包图片,写入byte[]
  49. // 取得内存输出流
  50. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
  51. IIOImage iIamge = new IIOImage(image, null, null);
  52.  
  53. // 此处因为ImageWriter中用来接收write信息的output要求必须是ImageOutput
  54. // 通过ImageIo中的静态方法,得到byteArrayOutputStream的ImageOutput
  55. writer.setOutput(ImageIO.createImageOutputStream(byteArrayOutputStream));
  56. writer.write(null, iIamge, iwp);
  57. imgBytes = byteArrayOutputStream.toByteArray();
  58. } catch (IOException e) {
  59. System.out.println("write errro");
  60. e.printStackTrace();
  61. }
  62. return imgBytes;
  63. }
  64. }

3.其它代码

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

  1. String imgBase64 = "";
  2. try {
  3. // 图片大小超过1MB
  4. if (file.getSize()/1024 > 1024) {
  5. byte[] imgBytes = ImgUtils.compressPicByQuality(file.getBytes(),0.1F);
  6. imgBase64 = Base64.encodeBase64String(imgBytes);
  7. } else {
  8. imgBase64 = Base64.encodeBase64String(file.getBytes());
  9. }
  10. } catch (IOException e1) {
  11. e1.printStackTrace();
  12. }

  说明:

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

4.增加前端代码

  1. /**
  2. * 拍照或选择图片
  3. */
  4. this.uploadPicture = function () {
  5. // js 获取文件对象
  6. var fileObj = document.getElementById("file").files[0];
  7. if (null == fileObj) {
  8. alert("图像上传失败,请重试!");
  9. }
  10. // TODO 显示遮罩
  11.  
  12. // 创建form表单
  13. var formFile = new FormData();
  14. //加入文件对象
  15. formFile.append("file", fileObj);
  16. // 创建XMLHttpRequest 对象
  17. var xhr = new XMLHttpRequest();
  18. xhr.open("post", baseUrl + "/weixin/facein/upImg3.do", true);
  19. xhr.onload = function () {
  20. var resData = JSON.parse(this.responseText)
  21. // 将返回数据转换成JSON对象
  22. var json = eval('(' + resData.data2 + ')');
  23. // 身份证识别成功
  24. if (json.ret == 0) {
  25. // TODO 将所需数据填充到页面
  26.  
  27. } else {
  28. alert("识别失败,请重试!" + json.msg);
  29. }
  30. document.getElementById("file").value = "";
  31. // TODO 隐藏遮罩
  32. };
  33. // 调用腾讯接口
  34. xhr.send(formFile);
  35. };

  

写在最后

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

相关推荐:

 

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. 【BZOJ4833】最小公倍佩尔数(min-max容斥)

    [BZOJ4833]最小公倍佩尔数(min-max容斥) 题面 BZOJ 题解 首先考虑怎么求\(f(n)\),考虑递推这个东西 \((1+\sqrt 2)(e(n-1)+f(n-1)\sqrt 2) ...

  2. Git更改文件名大小写,提交失败问题解决

    背景:某java文件大小写写错了,一直提交不上去 例如我只是将updatePrivacySettingsTest.java变更为UpdatePrivacySettingsTest.java,但是add ...

  3. mssql 根据执行计划细节做优化操作

    示例: 1.如果select * 通常情况下聚集索引会比非聚集索引更优. 2.如果出现Nested Loops,需要查下是否需要聚集索引,非聚集索引是否可以包含所有需要的列. 3.Hash Match ...

  4. 使用linq对ado.net查询出来dataset集合转换成对象(查询出来的数据结构为一对多)

    public async Task<IEnumerable<QuestionAllInfo>> GetAllQuestionByTypeIdAsync(int id) { st ...

  5. datatable转layui表格【偏原理】

    如题这个类负责把datatable转换为layui表格可以显示的内容.适合配合表格url字段的webapi服务端,为其返回响应字符串.代码如下:using System;using System.We ...

  6. mvc_第二遍

    之前,我们学习了mvc最基本的架构和用法. 在学习了真正的属性.委托和列表之后,我们就可以使用微软提倡的模型了. 需要注意的是,这种模型以及它的工作方式,身上有着浓浓的微软印记.在方便的同时,也要自行 ...

  7. Mac系统docker初探

    最近把工作环境要切到mac中,由于一直想看看docker是怎么回事,以前在win和linux下面都没有用起来,这次在mac中决定试一把,尝试下新的环境部署方式. 安装docker mac中,直接有类似 ...

  8. DjangoDRF总结

    思维导图xmind文件:https://files-cdn.cnblogs.com/files/benjieming/DRF%E6%A8%A1%E5%9D%97.zip

  9. APS助众生药业突破运营管理瓶颈

    众生药业一直致力于为了世界提供世界级的产品及服务,成立以来公司先后实施了ERP系统,CRM系统,WMS系统,OA系统,精益生产,朝着行业信息化水平领先的目标迈进. 但近年随着业务量的不断扩大,仅仅拥有 ...

  10. InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's

    InvalidOperationException: Operations that change non-concurrent collections must have exclusive acc ...