java 压缩图片(只缩小体积,不更改图片尺寸)的示例

网友投稿 683 2022-11-16


java 压缩图片(只缩小体积,不更改图片尺寸)的示例

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

 &http://nbsp;   *       图片质量(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 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 压缩图片(只缩小体积,不更改图片尺寸)的示例的详细内容,更多关于java 压缩图片的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring获取管理对象常用方法详解
下一篇:Spring发送邮件如何内嵌图片增加附件
相关文章

 发表评论

暂时没有评论,来抢沙发吧~