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

Java中上傳圖片壓縮處理的方法示例

 更新時間:2017年02月22日 15:39:54   作者:cuisuqiang  
本篇文章主要介紹了Java中圖片壓縮處理的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

整理文檔,搜刮出一個Java做圖片壓縮的代碼,稍微整理精簡一下做下分享。

首先,要壓縮的圖片格式不能說動態(tài)圖片,你可以使用bmp、png、gif等,至于壓縮質(zhì)量,可以通過BufferedImage來指定。

在C盤的temp下放置一張圖片pic123.jpg,盡量找一個像素高一點的圖片,這里我找了一張5616*3744的。

package test; 
import java.io.*; 
import java.util.Date; 
import java.awt.*; 
import java.awt.image.*; 
import javax.imageio.ImageIO; 
import com.sun.image.codec.jpeg.*; 
/** 
 * 圖片壓縮處理 
 * @author 崔素強 
 */ 
public class ImgCompress { 
  private Image img; 
  private int width; 
  private int height; 
  @SuppressWarnings("deprecation") 
  public static void main(String[] args) throws Exception { 
    System.out.println("開始:" + new Date().toLocaleString()); 
    ImgCompress imgCom = new ImgCompress("C:\\temp\\pic123.jpg"); 
    imgCom.resizeFix(400, 400); 
    System.out.println("結(jié)束:" + new Date().toLocaleString()); 
  } 
  /** 
   * 構(gòu)造函數(shù) 
   */ 
  public ImgCompress(String fileName) throws IOException { 
    File file = new File(fileName);// 讀入文件 
    img = ImageIO.read(file);   // 構(gòu)造Image對象 
    width = img.getWidth(null);  // 得到源圖寬 
    height = img.getHeight(null); // 得到源圖長 
  } 
  /** 
   * 按照寬度還是高度進行壓縮 
   * @param w int 最大寬度 
   * @param h int 最大高度 
   */ 
  public void resizeFix(int w, int h) throws IOException { 
    if (width / height > w / h) { 
      resizeByWidth(w); 
    } else { 
      resizeByHeight(h); 
    } 
  } 
  /** 
   * 以寬度為基準,等比例放縮圖片 
   * @param w int 新寬度 
   */ 
  public void resizeByWidth(int w) throws IOException { 
    int h = (int) (height * w / width); 
    resize(w, h); 
  } 
  /** 
   * 以高度為基準,等比例縮放圖片 
   * @param h int 新高度 
   */ 
  public void resizeByHeight(int h) throws IOException { 
    int w = (int) (width * h / height); 
    resize(w, h); 
  } 
  /** 
   * 強制壓縮/放大圖片到固定的大小 
   * @param w int 新寬度 
   * @param h int 新高度 
   */ 
  public void resize(int w, int h) throws IOException { 
    // SCALE_SMOOTH 的縮略算法 生成縮略圖片的平滑度的 優(yōu)先級比速度高 生成的圖片質(zhì)量比較好 但速度慢 
    BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );  
    image.getGraphics().drawImage(img, 0, 0, w, h, null); // 繪制縮小后的圖 
    File destFile = new File("C:\\temp\\456.jpg"); 
    FileOutputStream out = new FileOutputStream(destFile); // 輸出到文件流 
    // 可以正常實現(xiàn)bmp、png、gif轉(zhuǎn)jpg 
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
    encoder.encode(image); // JPEG編碼 
    out.close(); 
  } 
} 

運行后在C盤temp下生成一個465.jpg,像素大小為600*400,像素大小是我指定的。用時也就是一兩秒的事情,注意,我這張圖片是10M的,壓縮后是40.5KB。

一些細節(jié)事項可以參考代碼中的注釋。

要注意的是,你可能想試一試較大圖片的處理能力,如果你的JDK沒有指定默認內(nèi)存,那可能會有如下異常,因為內(nèi)存不夠大:

開始:2014-4-14 16:25:11 
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
  at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:58) 
  at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397) 
  at java.awt.image.Raster.createWritableRaster(Raster.java:938) 
  at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1169) 
  at javax.imageio.ImageReader.getDestination(ImageReader.java:2879) 
  at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:943) 
  at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:915) 
  at javax.imageio.ImageIO.read(ImageIO.java:1422) 
  at javax.imageio.ImageIO.read(ImageIO.java:1282) 
  at test.ImgCompress.<init>(ImgCompress.java:31) 
  at test.ImgCompress.main(ImgCompress.java:21) 

解決方法:

在Eclipse里選:Window->Preference->Installed JREs->Edit(選中jre),

在Default VM Arguments里輸入-Xms256m -Xmx1024m,表示最小內(nèi)存256M,最大1G,然后運行就可以了

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis的collection三層嵌套查詢方式(驗證通過)

    Mybatis的collection三層嵌套查詢方式(驗證通過)

    這篇文章主要介紹了Mybatis的collection三層嵌套查詢方式(驗證通過),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java登錄驗證碼實現(xiàn)代碼

    java登錄驗證碼實現(xiàn)代碼

    這篇文章介紹了java實現(xiàn)登錄驗證碼:用興趣的同學(xué)可以參考一下
    2013-10-10
  • 一文帶你學(xué)習(xí)Java多維數(shù)組的使用技巧

    一文帶你學(xué)習(xí)Java多維數(shù)組的使用技巧

    Java作為一門廣泛應(yīng)用于各行各業(yè)的開發(fā)語言,具有豐富的數(shù)據(jù)類型支持,其中多維數(shù)組是其重要的一種,多維數(shù)組可以更加方便地組織數(shù)據(jù),提高Java應(yīng)用程序的效率,本文將為大家介紹Java中多維數(shù)組的基本概念和常用操作,助力讀者更好地掌握多維數(shù)組的使用技巧
    2023-11-11
  • Spring的同一個服務(wù)會加載多次的問題分析及解決方法

    Spring的同一個服務(wù)會加載多次的問題分析及解決方法

    這篇文章主要介紹了Spring的同一個服務(wù)為什么會加載多次,我們先來梳理一下?Web?容器中如何加載?Bean,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • OpenFeign無法遠程調(diào)用問題及解決

    OpenFeign無法遠程調(diào)用問題及解決

    文章介紹了在使用Feign客戶端時遇到的讀超時問題,并分析了原因是系統(tǒng)啟動時未先加載Nacos配置,為了解決這個問題,建議將Nacos配置放在`bootstrap.yml`文件中,以便項目啟動時優(yōu)先加載Nacos配置
    2024-11-11
  • Java基礎(chǔ)學(xué)習(xí)之接口詳解

    Java基礎(chǔ)學(xué)習(xí)之接口詳解

    接口,是Java語言中一種引用類型,是方法的集合,如果說類的內(nèi)部封裝了成員變量、構(gòu)造方法和成員方法,那么接口的內(nèi)部主要就是封裝了方法。本文通過一些示例詳細為大家展示了接口的使用,需要的可以參考一下
    2022-10-10
  • Java中基于DeferredResult的異步服務(wù)詳解

    Java中基于DeferredResult的異步服務(wù)詳解

    這篇文章主要介紹了Java中基于DeferredResult的異步服務(wù)詳解,DeferredResult字面意思是"延遲結(jié)果",它允許Spring MVC收到請求后,立即釋放(歸還)容器線程,以便容器可以接收更多的外部請求,提升吞吐量,需要的朋友可以參考下
    2023-12-12
  • 基于springMvc+hibernate的web application的構(gòu)建

    基于springMvc+hibernate的web application的構(gòu)建

    下面小編就為大家?guī)硪黄趕pringMvc+hibernate的web application的構(gòu)建。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java.lang.ArrayIndexOutOfBoundsException的報錯解決

    Java.lang.ArrayIndexOutOfBoundsException的報錯解決

    Java.lang.ArrayIndexOutOfBoundsException是一個常見的錯誤,通常由于訪問超出數(shù)組邊界的索引值導(dǎo)致,本文就詳細的介紹了解決方法,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • Java 連接Access數(shù)據(jù)庫的兩種方式

    Java 連接Access數(shù)據(jù)庫的兩種方式

    這篇文章主要介紹了Java 連接Access數(shù)據(jù)庫的兩種方式,本文著重講解使用JDBC連接操作Access數(shù)據(jù)庫,需要的朋友可以參考下
    2015-06-06

最新評論

漳州市| 阳朔县| 舒城县| 深州市| 江门市| 江川县| 汉阴县| 漾濞| 利津县| 贵德县| 丰镇市| 时尚| 介休市| 尼木县| 宝丰县| 文安县| 马山县| 安国市| 峨眉山市| 宁乡县| 昆山市| 遵义县| 兴安盟| 陆良县| 垣曲县| 济宁市| 塔河县| 城固县| 方山县| 长兴县| 资阳市| 治多县| 锦州市| 绍兴县| 涿鹿县| 卫辉市| 平舆县| 石首市| 阳信县| 普宁市| 普定县|