溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用java如何實現壓縮圖片體積

發布時間:2020-10-26 16:58:05 來源:億速云 閱讀:201 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關使用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
     *       圖片質量(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如何實現壓縮圖片體積,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女