最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 壓縮圖片(只縮小體積,不更改圖片尺寸)的示例

 更新時(shí)間:2020年10月21日 11:18:26   作者:Marydon  
這篇文章主要介紹了java 如何壓縮圖片體積,幫助大家更好的利用Java處理圖片,應(yīng)對特殊情況,感興趣的朋友可以了解下

1.情景展示

  在調(diào)用騰訊身份證OCR接口的時(shí)候,由于要求圖片大小只能限制在1MB以內(nèi),這樣,就必須使用到圖片壓縮技術(shù)

2.代碼展示

/**
 * 圖片處理工具類
 * @explain
 * @author Marydon
 * @creationTime 2019年9月3日上午10:14:17
 * @version 1.0
 * @since
 * @email marydon20170307@163.com
 */
public class ImgUtils {
    /**
     * 壓縮圖片(通過降低圖片質(zhì)量)
     * @explain 壓縮圖片,通過壓縮圖片質(zhì)量,保持原圖大小
     * @param quality
     *       圖片質(zhì)量(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的輸出參數(shù)設(shè)置(ImageWriteParam )
            ImageWriteParam iwp = writer.getDefaultWriteParam();
            // 設(shè)置可否壓縮
            iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
             // 設(shè)置壓縮質(zhì)量參數(shù)
            iwp.setCompressionQuality(quality);
 
            iwp.setProgressiveMode(ImageWriteParam.MODE_DISABLED);
 
            ColorModel colorModel = ColorModel.getRGBdefault();
            // 指定壓縮時(shí)使用的色彩模式
            iwp.setDestinationType(
                    new javax.imageio.ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(16, 16)));
 
            // 開始打包圖片,寫入byte[]
            // 取得內(nèi)存輸出流
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            IIOImage iIamge = new IIOImage(image, null, null);
 
            // 此處因?yàn)镮mageWriter中用來接收write信息的output要求必須是ImageOutput
            // 通過ImageIo中的靜態(tài)方法,得到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 顯示遮罩
     
    // 創(chuàng)建form表單
    var formFile = new FormData();
    //加入文件對象
    formFile.append("file", fileObj);
    // 創(chuàng)建XMLHttpRequest 對象
    var xhr = new XMLHttpRequest();
    xhr.open("post", baseUrl + "/weixin/facein/upImg3.do", true);
    xhr.onload = function () {
        var resData = JSON.parse(this.responseText)
        // 將返回?cái)?shù)據(jù)轉(zhuǎn)換成JSON對象
        var json = eval('(' + resData.data2 + ')');
        // 身份證識別成功
        if (json.ret == 0) {
            // TODO 將所需數(shù)據(jù)填充到頁面
             
        } else {
            alert("識別失敗,請重試!" + json.msg);
        }
        document.getElementById("file").value = "";
        // TODO 隱藏遮罩
    };
    // 調(diào)用騰訊接口
    xhr.send(formFile);
};

以上就是java 壓縮圖片(只縮小體積,不更改圖片尺寸)的示例的詳細(xì)內(nèi)容,更多關(guān)于java 壓縮圖片的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java設(shè)計(jì)模式之工廠方法模式詳解

    Java設(shè)計(jì)模式之工廠方法模式詳解

    工廠方法模式(FACTORY METHOD)是一種常用的類創(chuàng)建型設(shè)計(jì)模式,此模式的核心精神是封裝類中變化的部分,提取其中個(gè)性化善變的部分為獨(dú)立類,通過依賴注入以達(dá)到解耦、復(fù)用和方便后期維護(hù)拓展的目的。它的核心結(jié)構(gòu)有四個(gè)角色,分別是抽象工廠、具體工廠、抽象產(chǎn)品、具體產(chǎn)品
    2022-08-08
  • springboot實(shí)現(xiàn)微信掃碼登錄的項(xiàng)目實(shí)踐

    springboot實(shí)現(xiàn)微信掃碼登錄的項(xiàng)目實(shí)踐

    微信掃碼功能是目前第三方登錄常見功能,前不久有個(gè)項(xiàng)目剛好用上,本文主要介紹了springboot實(shí)現(xiàn)微信掃碼登錄的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • idea 默認(rèn)路徑修改從C盤更改到D盤

    idea 默認(rèn)路徑修改從C盤更改到D盤

    本文主要介紹了idea 默認(rèn)路徑修改從C盤更改到D盤,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • springboot?max-http-header-size最大長度的那些事及JVM調(diào)優(yōu)方式

    springboot?max-http-header-size最大長度的那些事及JVM調(diào)優(yōu)方式

    這篇文章主要介紹了springboot?max-http-header-size最大長度的那些事及JVM調(diào)優(yōu)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Java鍵盤錄入Scanner類的使用方法詳析

    Java鍵盤錄入Scanner類的使用方法詳析

    在Java編程中,引用數(shù)據(jù)類型是用來存儲對象的引用(地址),而Scanner類是引用數(shù)據(jù)類型的一種,用于讀取輸入數(shù)據(jù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • Java實(shí)現(xiàn)接月餅小游戲的示例代碼

    Java實(shí)現(xiàn)接月餅小游戲的示例代碼

    本文將用Java語言自制一個(gè)小游戲:《接月餅小游戲》,游戲規(guī)則為不要被月亮砸到,盡可能地多接月餅。文中的實(shí)現(xiàn)代碼講解清晰,感興趣的可以動手試一試
    2022-02-02
  • Spring BeanPostProcessor接口使用詳解

    Spring BeanPostProcessor接口使用詳解

    本篇文章主要介紹了Spring BeanPostProcessor接口使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • 消息隊(duì)列MQ使用詳解

    消息隊(duì)列MQ使用詳解

    消息隊(duì)列(MQ)是一種基于“先進(jìn)先出”原則的數(shù)據(jù)結(jié)構(gòu),廣泛應(yīng)用于分布式系統(tǒng)中,主要用于應(yīng)用解耦、異步消息處理和流量削峰,消息隊(duì)列中間件通過允許生產(chǎn)者發(fā)送消息到隊(duì)列,消費(fèi)者從隊(duì)列中拉取消息或訂閱消息,實(shí)現(xiàn)高效、可擴(kuò)展和最終一致性的系統(tǒng)架構(gòu)
    2024-10-10
  • 淺談Java父子類加載順序

    淺談Java父子類加載順序

    本文主要介紹了Java父子類加載順序,那么這么長怎么記呀?本文就幫大家總結(jié)一下,更有利于記憶,感興趣的可以了解一下
    2021-08-08
  • 一篇文章帶你入門Java運(yùn)算符

    一篇文章帶你入門Java運(yùn)算符

    這篇文章主要介紹了Java基本數(shù)據(jù)類型和運(yùn)算符,結(jié)合實(shí)例形式詳細(xì)分析了java基本數(shù)據(jù)類型、數(shù)據(jù)類型轉(zhuǎn)換、算術(shù)運(yùn)算符、邏輯運(yùn)算符等相關(guān)原理與操作技巧,需要的朋友可以參考下
    2021-08-08

最新評論

武穴市| 黔东| 江川县| 根河市| 阳朔县| 潼南县| 宁远县| 仙游县| 江川县| 长宁区| 志丹县| 衡水市| 成武县| 壤塘县| 古交市| 永新县| 苍梧县| 邵东县| 昌平区| 平阴县| 井研县| 朝阳区| 交城县| 淮滨县| 留坝县| 保山市| 政和县| 博罗县| 泸水县| 栾城县| 汪清县| 潼关县| 溆浦县| 阿拉善盟| 确山县| 普兰店市| 永嘉县| 镇江市| 呈贡县| 富裕县| 仁化县|