亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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); 
    } 
  } 
  /** 
   * 以寬度為基準(zhǔn),等比例放縮圖片 
   * @param w int 新寬度 
   */ 
  public void resizeByWidth(int w) throws IOException { 
    int h = (int) (height * w / width); 
    resize(w, h); 
  } 
  /** 
   * 以高度為基準(zhǔn),等比例縮放圖片 
   * @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沒有指定默認(rèn)內(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)文章

  • SpringBoot?2.7.18?集成?Mybatis?Plus?+?Druid的實例詳解

    SpringBoot?2.7.18?集成?Mybatis?Plus?+?Druid的實例詳解

    Mybatis和MybatisPlus都是流行的持久層框架,MybatisPlus在Mybatis基礎(chǔ)上增加了更多便捷的功能,如自動CRUD、分頁插件等,文章還提到了Entity、Mapper、Service、Controller等組件的基本使用方法,為開發(fā)者提供了一套完整的集成方案
    2024-10-10
  • AJAX+JAVA用戶登陸注冊驗證的實現(xiàn)代碼

    AJAX+JAVA用戶登陸注冊驗證的實現(xiàn)代碼

    這篇文章主要介紹了AJAX+JAVA用戶登陸注冊驗證的實現(xiàn)代碼,通過ajax異步刷新頁面驗證用戶輸入的賬號密碼是否在數(shù)據(jù)庫中存在。非常具有實用價值,需要的朋友可以參考下
    2018-06-06
  • maven項目install時忽略執(zhí)行test方法的總結(jié)

    maven項目install時忽略執(zhí)行test方法的總結(jié)

    這篇文章主要介紹了maven項目install時忽略執(zhí)行test方法的總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • MapTask工作機制圖文詳解

    MapTask工作機制圖文詳解

    今天小編就為大家分享一篇關(guān)于MapTask工作機制圖文詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • SpringBoot整合ELK實現(xiàn)日志監(jiān)控

    SpringBoot整合ELK實現(xiàn)日志監(jiān)控

    這篇文章主要為大家詳細介紹了SpringBoot整合ELK實現(xiàn)日志監(jiān)控的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • 深入理解hibernate的三種狀態(tài)

    深入理解hibernate的三種狀態(tài)

    本篇文章主要介紹了深入理解hibernate的三種狀態(tài) ,主要包括了transient(瞬時狀態(tài)),persistent(持久化狀態(tài))以及detached(離線狀態(tài)),有興趣的同學(xué)可以了解一下
    2017-05-05
  • Java中Instant的使用及轉(zhuǎn)換

    Java中Instant的使用及轉(zhuǎn)換

    Instant是java.time包中的一個類,本文主要介紹了Java中Instant的使用及轉(zhuǎn)換,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Java使用ObjectMapper的簡單示例

    Java使用ObjectMapper的簡單示例

    這篇文章主要介紹了Java使用ObjectMapper的簡單示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot中DTO/VO/Entity相互轉(zhuǎn)換詳解

    SpringBoot中DTO/VO/Entity相互轉(zhuǎn)換詳解

    在我們平時開發(fā)中,dto、vo、entity之間的相互轉(zhuǎn)換是很頻繁的操作,這篇文章就簡單記錄一下在平時開發(fā)中SpringBoot的轉(zhuǎn)換方法,希望對大家有所幫助
    2025-01-01
  • Java Socket實現(xiàn)UDP編程淺析

    Java Socket實現(xiàn)UDP編程淺析

    類 DatagramSocket 何 DatagramPacket(數(shù)據(jù)包/數(shù)據(jù)報) 實現(xiàn)了基于 UDP協(xié)議網(wǎng)絡(luò)程序;UDP數(shù)據(jù)報通過數(shù)據(jù)報套接字 DatagramSocket 發(fā)送和接收,系統(tǒng)不保證 UDP數(shù)據(jù)報一定能夠安全送達目的地,也不確定什么時候可以抵達
    2022-11-11

最新評論