国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

基于java流實現壓縮圖片過程解析

瀏覽:5日期:2022-08-22 16:41:15

整理文檔,搜刮出一個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:temppic123.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:temp456.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)

解決方法:

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 精品国产亚一区二区三区 | 日本一区二区三区在线 视频 | 亚洲 自拍 欧美 综合 | 婷婷色九月综合激情丁香 | 日韩免费一区二区三区在线 | 欧美一区二区三区在观看 | 美女张开大腿让男人桶 | 亚洲欧美日韩中文字幕在线一 | 国产欧美va欧美va香蕉在线观 | 特级毛片全部免费播放a一级 | 久久性妇女精品免费 | 日本在线不卡免 | 高清在线观看自拍视频 | 欧美一级毛片俄罗斯 | 中文字幕高清在线天堂网 | 日韩a毛片免费全部播放完整 | 国产成人综合网在线观看 | 亚洲天堂网视频 | 日本欧美一区二区三区视频 | 精品欧美一区二区三区精品久久 | 中文字幕日本不卡 | 精品国产福利 | 久久频这里精品99香蕉久网址 | 91福利国产在线观一区二区 | 成年女人色毛片免费 | 久9精品视频| 一色屋精品亚洲香蕉网站 | 美女网站在线观看视频18 | 国产美女精品三级在线观看 | 国产高清美女一级a毛片久久w | 国产精品反差婊在线观看 | 午夜香蕉成视频人网站高清版 | 久久狠| a站在线观看 | 九九在线精品视频xxx | 亚洲 欧美 在线观看 | 成年人视频在线免费 | 国产精品久久做爰 | 日韩乱码视频 | 国产三级小视频在线观看 | 午夜宅男宅女看在线观看 |