时间:2021-05-19
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");// 得到writerImageWriter 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的ImageOutputwriter.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 {// 图片大小超过1MBif (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 压缩图片(只缩小体积,不更改图片尺寸)的示例的详细内容,更多关于java 压缩图片的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size)。压缩图片质量NSData*data=UIImageJPEGRepresentati
小伙伴们会遇到上传的图片被压缩或拉伸的非常难看的情况,这是因为上传的图片尺寸不对,需要修改图片的尺寸才能漂亮的呈现出来,那么怎么修改图片大小?下面小编就为大家介
如何在2345看图王中更改图片的尺寸吗?当前使用2345看图王这款软件的伙伴越来越多,它操作简单,今天小编和大家一起来了解下关于2345看图王更改图片尺寸的操作
本文实例讲述了PHP实现压缩图片尺寸并转为jpg格式的方法。分享给大家供大家参考,具体如下:$towidth/$srcH){$b=$toheight/$srcH
本文实例讲述了Python实现更改图片尺寸大小的方法。分享给大家供大家参考,具体如下:1、PIL包推荐Pillow。2、源码:#encoding=utf-8#a