『壹』 我在用java進行圖片壓縮時,遇到130MB 的圖片是報錯 , 像十幾MB時不會出錯,
Runtime.getRuntime().maxMemory(),查看一下jvm最大內存,若小了,可通過java參數來設置,如 java -Xmx1024m Test,將最大堆空間設為1024m
『貳』 用java能實現JPEG壓縮演算法嗎
BufferedImageimage=newBufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(img,0,0,w,h,null);//繪制縮小後的圖
FiledestFile=newFile("C:\tmp1.jpg");
FileOutputStreamout=newFileOutputStream("C:\tmp2.jpg");//輸出到文件流
JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
『叄』 JPG、GIF、PNG和BMP格式的圖片各有什麼優點和缺點
JPG、GIF、PNG和BMP有以下優缺點:
1、優點。
JPG:JPEG圖片格式的設計目標,是在不影響人類可分辨的圖片質量的前提下,盡可能的壓縮文件大小。這意味著JPEG去掉了一部分圖片的原始信息,也即是進行了有損壓縮。JPEG的圖片的優點,是採用了直接色,得益於更豐富的色彩,JPEG非常適合用來存儲照片,用來表達更生動的圖像效果,比如顏色漸變。
GIF:GIF是無損的,採用GIF格式保存圖片不會降低圖片質量。但得益於數據的壓縮,GIF格式的圖片,其文件大小要遠小於BMP格式的圖片。文件小,是GIF格式的優點,同時,GIF格式還具有支持動畫以及透明的優點。
PNG:PNG是一種比較新的圖片格式,PNG-8是非常好的GIF格式替代者,在可能的情況下,應該盡可能的使用PNG-8而不是GIF,因為在相同的圖片效果下,PNG-8具有更小的文件體積。
BMP:這是一種比較老的圖片格式。BMP是無損的,但同時這種圖片格式幾乎沒有對數據進行壓縮,所以BMP格式的圖片通常具有較大的文件大小。雖然同時支持索引色和直接色是一個優點
2、缺點
JPG:與GIF相比,JPEG不適合用來存儲企業Logo、線框類的圖。因為有損壓縮會導致圖片模糊,而直接色的選用,又會導致圖片文件較GIF更大。
GIF:GIF格式僅支持8bit的索引色,即在整個圖片中,只能存在256種不同的顏色。
PNG:PNG-8本身也是支持動畫的,只是瀏覽器支持得不好,不像GIF那樣受到廣泛的支持。
BMP:太大的文件格式格式導致它幾乎沒有用武之地,現在除了在Windows操作系統中還比較常見之外,幾乎看不到它。
(3)javajpeg壓縮演算法擴展閱讀:
圖片文件格式有可能會對圖片的文件大小進行不同程度的壓縮,圖片的壓縮分為有損壓縮和無損壓縮兩種。
有損壓縮。指在壓縮文件大小的過程中,損失了一部分圖片的信息,也即降低了圖片的質量,並且這種損失是不可逆的,不可能從有一個有損壓縮過的圖片中恢復出全來的圖片。常見的有損壓縮手段,是按照一定的演算法將臨近的像素點進行合並。
無損壓縮。只在壓縮文件大小的過程中,圖片的質量沒有任何損耗。任何時候都可以從無損壓縮過的圖片中恢復出原來的信息。
『肆』 JPEG2000標準的演算法具體分為哪幾個部分,每一部分都實現什麼功能
JPEG2000標準的演算法由:核心編碼系統、擴展部分、動態JPEG2000、 一致性測試、參考軟體、混合圖像文件格式、JPSEC:安全JPEG2000、JPIP:互動工具 APIs和協議、JP3D:3維數據和浮點數據、JPWL:無線、ISO 基本媒體文件格式、進入標准JPEG2000編碼器 12部分組成(原有13部分,後來一部分被取消)
1、核心編碼系統:定義了核心編碼且明確了其在標準的其他部分中的使用,還規定了一
種簡單的文件格式JP2。
2、擴展部分:擴展了第1部分解碼部分的高級特徵,包括擴展文件格式支持和採用更復
雜的演算法提高壓縮效率。
3、動態JPEG2000:它主要以第1部分的附加文件格式技術為基礎。編碼器明顯比MPEG標准簡單,主要應用於如快速捕捉模式的數字攝影、視頻編輯和數字電影的歸檔和發行。
4、為保證標准高質量的實現定義
了一致性測試
5、定義兩種參考軟體來實現第1部分,一種是由TJ2000工作組提供的JAVA工具,另一
種是C工具,稱作JASPER。
6、定義了一種混合圖像文件格式。
7、JPSEC與JPEG2000安全應用有關。
8、JPIP為分配有關JPEG2000應用定義了一套高級網路協議。
9、JP3D與3維數據和浮點數據壓縮有關。
10、JPWL使用JPEG2000處理無線應用。
11、是對第3部分的增補。
12、2004年3月建立,主要是對JPEG2000編碼器進行標准化。
我這里有份專門介紹JPEG2000標準的演算法的資料,如果你需要,可以留下郵箱我發給你!
『伍』 求助java壓縮圖片存儲大小的方法
可以使用Draw這個類,通過改變像素來改變存儲大小,實例如下:
(StringsrcFilePath,StringdescFilePath)throwsIOException{
Filefile=null;
BufferedImagesrc=null;
FileOutputStreamout=null;
ImageWriterimgWrier;
ImageWriteParamimgWriteParams;
//指定寫圖片的方式為jpg
imgWrier=ImageIO.getImageWritersByFormatName("jpg").next();
imgWriteParams=newjavax.imageio.plugins.jpeg.JPEGImageWriteParam(
null);
//要使用壓縮,必須指定壓縮方式為MODE_EXPLICIT
imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
//這里指定壓縮的程度,參數qality是取值0~1范圍內,
imgWriteParams.setCompressionQuality((float)1);
imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
ColorModelcolorModel=ImageIO.read(newFile(srcFilePath)).getColorModel();//ColorModel.getRGBdefault();
//指定壓縮時使用的色彩模式
//imgWriteParams.setDestinationType(newjavax.imageio.ImageTypeSpecifier(
//colorModel,colorModel.createCompatibleSampleModel(16,16)));
imgWriteParams.setDestinationType(newjavax.imageio.ImageTypeSpecifier(
colorModel,colorModel.createCompatibleSampleModel(16,16)));
try{
if(isBlank(srcFilePath)){
returnfalse;
}else{
file=newFile(srcFilePath);System.out.println(file.length());
src=ImageIO.read(file);
out=newFileOutputStream(descFilePath);
imgWrier.reset();
//必須先指定out值,才能調用write方法,ImageOutputStream可以通過任何
//OutputStream構造
imgWrier.setOutput(ImageIO.createImageOutputStream(out));
//調用write方法,就可以向輸入流寫圖片
imgWrier.write(null,newIIOImage(src,null,null),
imgWriteParams);
out.flush();
out.close();
}
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}
returntrue;
}
publicstaticbooleanisBlank(Stringstring){
if(string==null||string.length()==0||string.trim().equals("")){
returntrue;
}
returnfalse;
}