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

基于java流實現(xiàn)壓縮圖片過程解析

 更新時間:2020年10月15日 11:08:41   作者:賈小仙  
這篇文章主要介紹了基于java流實現(xiàn)壓縮圖片過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

整理文檔,搜刮出一個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.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("結(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);
		// 得到源圖長
	}
	/** 
   * 按照寬度還是高度進(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);
	}
	/** 
   * 強制壓縮/放大圖片到固定的大小 
   * @param w int 新寬度 
   * @param h int 新高度 
   */
	public void resize(int w, int h) throws IOException {
		// SCALE_SMOOTH 的縮略算法 生成縮略圖片的平滑度的 優(yōu)先級比速度高 生成的圖片質(zhì)量比較好 但速度慢 
		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);
		// 輸出到文件流 
		// 可以正常實現(xiàn)bmp、png、gif轉(zhuǎn)jpg 
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		encoder.encode(p_w_picpath);
		// JPEG編碼 
		out.close();
	}
}

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

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

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

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) 

解決方法:

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

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

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

相關(guān)文章

  • Java 如何實現(xiàn)POST(x-www-form-urlencoded)請求

    Java 如何實現(xiàn)POST(x-www-form-urlencoded)請求

    這篇文章主要介紹了Java 實現(xiàn)POST(x-www-form-urlencoded)請求,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot對數(shù)據(jù)訪問層進(jìn)行單元測試的方法詳解

    SpringBoot對數(shù)據(jù)訪問層進(jìn)行單元測試的方法詳解

    我們公司作為一個面向銀行、金融機構(gòu)的TO B類企業(yè),頻繁遇到各個甲方爸爸提出的國產(chǎn)化數(shù)據(jù)庫的改造需求,包括OceanBase, TiDB,geldenDB等等,本文就介紹一種快高效、可復(fù)用的解決方案——對數(shù)據(jù)訪問層做單元測試,需要的朋友可以參考下
    2023-08-08
  • Java中使用Socket發(fā)送Java對象實例

    Java中使用Socket發(fā)送Java對象實例

    這篇文章主要介紹了Java中使用Socket發(fā)送Java對象實例,本文使用對象流直接發(fā)送對象,本文同時給出代碼實例,需要的朋友可以參考下
    2015-05-05
  • Spring Boot 中啟用定時任務(wù)的操作方法

    Spring Boot 中啟用定時任務(wù)的操作方法

    文章主要介紹了如何在Spring Boot中啟用定時任務(wù),包括使用@EnableScheduling注解、配置項控制定時任務(wù)是否開啟以及如何關(guān)閉cron定時任務(wù),感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Spring,hibernate,struts經(jīng)典面試筆試題(含答案)

    Spring,hibernate,struts經(jīng)典面試筆試題(含答案)

    這篇文章主要介紹了Spring,hibernate,struts經(jīng)典面試筆試題極其參考含答案,涉及SSH基本概念,原理與使用技巧,需要的朋友可以參考下
    2016-03-03
  • 最新評論

    莱西市| 都江堰市| 太仆寺旗| 巫溪县| 门源| 拜泉县| 象州县| 剑川县| 宣化县| 新乐市| 应用必备| 长阳| 长海县| 鄂温| 贡山| 油尖旺区| 晋城| 图木舒克市| 泾阳县| 浪卡子县| 台东县| 林甸县| 武穴市| 嘉鱼县| 通化市| 皮山县| 衡山县| 襄垣县| 孝感市| 大宁县| 赫章县| 广州市| 无为县| 晴隆县| 阿拉善盟| 拉孜县| 栾川县| 白城市| 桑植县| 绥芬河市| 两当县|