中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

java如何實現壓縮圖片

發布時間:2020-10-27 21:45:43 來源:億速云 閱讀:171 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關java如何實現壓縮圖片,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

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

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

package test;
import java.io.*;
import java.util.Date;
import java.awt.*;
import java.awt.p_w_picpath.*;
import javax.p_w_picpathio.ImageIO;
import com.sun.p_w_picpath.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("結束:" + new Date().toLocaleString());
	}
	/** 
   * 構造函數 
   */
	public ImgCompress(String fileName) throws IOException {
		File file = new File(fileName);
		// 讀入文件 
		img = ImageIO.read(file);
		// 構造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 的縮略算法 生成縮略圖片的平滑度的 優先級比速度高 生成的圖片質量比較好 但速度慢 
		BufferedImage p_w_picpath = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );
		p_w_picpath.getGraphics().drawImage(img, 0, 0, w, h, null);
		// 繪制縮小后的圖 
		File destFile = new File("C:\temp\456.jpg");
		FileOutputStream out = new FileOutputStream(destFile);
		// 輸出到文件流 
		// 可以正常實現bmp、png、gif轉jpg 
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		encoder.encode(p_w_picpath);
		// JPEG編碼 
		out.close();
	}
}

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

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

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

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
  at java.awt.p_w_picpath.DataBufferByte.<init>(DataBufferByte.java:58) 
  at java.awt.p_w_picpath.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397) 
  at java.awt.p_w_picpath.Raster.createWritableRaster(Raster.java:938) 
  at javax.p_w_picpathio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1169) 
  at javax.p_w_picpathio.ImageReader.getDestination(ImageReader.java:2879) 
  at com.sun.p_w_picpathio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:943) 
  at com.sun.p_w_picpathio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:915) 
  at javax.p_w_picpathio.ImageIO.read(ImageIO.java:1422) 
  at javax.p_w_picpathio.ImageIO.read(ImageIO.java:1282) 
  at test.ImgCompress.<init>(ImgCompress.java:31) 
  at test.ImgCompress.main(ImgCompress.java:21) 

關于java如何實現壓縮圖片就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

巩义市| 海南省| 辽宁省| 容城县| 海盐县| 共和县| 富源县| 奉新县| 平陆县| 盐源县| 闸北区| 绵竹市| 和龙市| 安西县| 永修县| 德昌县| 定襄县| 诏安县| 乌鲁木齐县| 蒙自县| 馆陶县| 菏泽市| 上思县| 江安县| 沙坪坝区| 武威市| 阳原县| 鸡东县| 镇赉县| 崇仁县| 安阳县| 青阳县| 玉山县| 正蓝旗| 凤山市| 东莞市| 灌南县| 宝兴县| 宁武县| 崇阳县| 大连市|