真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java如何實(shí)現(xiàn)將壓縮圖片上傳

這篇文章將為大家詳細(xì)講解有關(guān)Java如何實(shí)現(xiàn)將壓縮圖片上傳,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

成都創(chuàng)新互聯(lián)是一家專(zhuān)注于網(wǎng)站制作、做網(wǎng)站與策劃設(shè)計(jì),荔灣網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:荔灣等地區(qū)。荔灣做網(wǎng)站價(jià)格咨詢(xún):028-86922220

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

在C盤(pán)的temp下放置一張圖片pic123.jpg,盡量找一個(gè)像素高一點(diǎn)的圖片,這里我找了一張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 崔素強(qiáng) 
 */ 
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("開(kāi)始:" + 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對(duì)象 
    width = img.getWidth(null);  // 得到源圖寬 
    height = img.getHeight(null); // 得到源圖長(zhǎng) 
  } 
  /** 
   * 按照寬度還是高度進(jìn)行壓縮 
   * @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); 
  } 
  /** 
   * 強(qiáng)制壓縮/放大圖片到固定的大小 
   * @param w int 新寬度 
   * @param h int 新高度 
   */ 
  public void resize(int w, int h) throws IOException { 
    // SCALE_SMOOTH 的縮略算法 生成縮略圖片的平滑度的 優(yōu)先級(jí)比速度高 生成的圖片質(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); // 輸出到文件流 
    // 可以正常實(shí)現(xiàn)bmp、png、gif轉(zhuǎn)jpg 
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
    encoder.encode(image); // JPEG編碼 
    out.close(); 
  } 
} 

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

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

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

開(kāi)始:2014-4-14 16:25:11 
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
  at java.awt.image.DataBufferByte.(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.(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,然后運(yùn)行就可以了

關(guān)于Java如何實(shí)現(xiàn)將壓縮圖片上傳就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


當(dāng)前文章:Java如何實(shí)現(xiàn)將壓縮圖片上傳
標(biāo)題來(lái)源:http://weahome.cn/article/pspees.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部