導航:首頁 > 文件處理 > bufferedimage圖片壓縮

bufferedimage圖片壓縮

發布時間:2024-07-17 18:14:45

java直接壓縮bufferedimage黑色像素斑點問題。求大神解決。

壓縮太厲害了吧,75試試

❷ 圖片壓縮的原理是什麼

圖像壓縮的基本原理
圖像數據之所以能被壓縮,就是因為數據中存在著冗餘。圖像數據的冗餘主要表現為:圖像中相鄰像素間的相關性引起的空間冗餘;圖像序列中不同幀之間存在相關性引起的時間冗餘;不同彩色平面或頻譜帶的相關性引起的頻譜冗餘。數據壓縮的目的就是通過去除這些數據冗餘來減少表示數據所需的比特數。由於圖像數據量的龐大,在存儲、傳輸、處理時非常困難,因此圖像數據的壓縮就顯得非常重要。
信息時代帶來了「信息爆炸」,使數據量大增,因此,無論傳輸或存儲都需要對數據進行有效的壓縮。在遙感技術中,各種航天探測器採用壓縮編碼技術,將獲取的巨大信息送回地面。
圖像壓縮是數據壓縮技術在數字圖像上的應用,它的目的是減少圖像數據中的冗餘信息從而用更加高效的格式存儲和傳輸數據。

❸ 求助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;
}

❹ java上傳圖片 生成縮略圖,如果上傳的圖片尺寸比較小就壓縮處理

//將圖按比例縮小。
public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
// targetW,targetH分別表示目標長和寬
int type = source.getType();
BufferedImage target = null;
double sx = (double) targetW / source.getWidth();
double sy = (double) targetH / source.getHeight();
//這里想實現在targetW,targetH范圍內實現等比縮放。如果不需要等比縮放
//則將下面的if else語句注釋即可
if(sx>sy)
{
sx = sy;
targetW = (int)(sx * source.getWidth());
}else{
sy = sx;
targetH = (int)(sy * source.getHeight());
}
if (type == BufferedImage.TYPE_CUSTOM) { //handmade
ColorModel cm = source.getColorModel();
WritableRaster raster = cm.(targetW, targetH);
boolean alphaPremultiplied = cm.isAlphaPremultiplied();
target = new BufferedImage(cm, raster, alphaPremultiplied, null);
} else
target = new BufferedImage(targetW, targetH, type);
Graphics2D g = target.createGraphics();
//smoother than exlax:
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
g.dispose();
return target;
}

public static void saveImageAsJpg (String fromFileStr,String saveToFileStr,int width,int hight)
throws Exception {
BufferedImage srcImage;
// String ex = fromFileStr.substring(fromFileStr.indexOf("."),fromFileStr.length());
String imgType = "JPEG";
if (fromFileStr.toLowerCase().endsWith(".png")) {
imgType = "PNG";
}
// System.out.println(ex);
File saveFile=new File(saveToFileStr);
File fromFile=new File(fromFileStr);
srcImage = ImageIO.read(fromFile);
if(width > 0 || hight > 0)
{
srcImage = resize(srcImage, width, hight);
}
ImageIO.write(srcImage, imgType, saveFile);

}

public static void main (String argv[]) {
try{
//參數1(from),參數2(to),參數3(寬),參數4(高)
saveImageAsJpg("C:\\Documents and Settings\\xugang\\桌面\\tmr-06.jpg",
"C:\\Documents and Settings\\xugang\\桌面\\2.jpg",
120,120);
} catch(Exception e){
e.printStackTrace();
}

}

❺ Java壓縮圖片ImageIO.read()報錯

BufferedImage sourceImg =ImageIO.read(new FileInputStream(new File(toPath)));

或者

BufferedImage sourceImg =ImageIO.read(new File(toPath));

❻ js鍥劇墖鍘嬬緝鍒版寚瀹氬ぇ灝忎笉鍙-java濡備綍瀹炵幇鎶婁竴涓澶у浘鐗囧帇緙╁埌鎸囧畾澶у皬鐨勫浘鐗囦笖闀垮芥瘮涓嶅彉錛

js鍘嬬緝鍥劇墖鍒板滻瀹氬儚緔犱互鍐咃紝500k涓轟緥

鏈鏂囨棬鍦ㄦ帰絀秊s鍘嬬緝鍥劇墖鐨勪袱縐嶆柟寮:

鏀瑰彉鍥劇墖闀垮

,

鏀瑰彉鍥劇墖璐ㄩ噺

,鍜岀粨鍚堜簡浠ヤ笂涓よ呯殑

鏈緇堟柟妗

棣栧厛,闃呰繪湰鏂囬渶瑕佺煡閬揷anvas鐨勪袱涓鏂規硶

榪欎袱涓鏂規硶鍏蜂綋鐨勮存槑鍙浠ュ湪MDN涓婃煡鐪,鍏充簬鍥劇墖鍘嬬緝,涔熸湁寰堝氱幇鎴愮殑鍗氬㈠彲浠ョ洿鎺ョ敤銆備絾鏄閭d簺鍗氬㈤兘鏈変釜闂棰,騫舵病鏈夊叧蹇冧箣鍚庡浘鐗囩殑鍘嬬緝璐ㄩ噺銆

鎴戣瘯鐫鐢ㄤ竴涓鐜版垚鐨勪緥瀛愬幓璺戜簡涓涓,涓涓1.7M鐨勫浘鐗囧帇緙╁埌浜23k,鍫縐板儚緔犵駭姣佺伃鎬х牬鍧忋

鍋囧備竴寮犲ぇ鍥懼彲鑳藉寘鍚鐫寰堝氭枃瀛楃瓑鍏抽敭淇℃伅,蹇呴』涓婁紶涔嬪悗浣跨敤鏂硅兘娓呮櫚杈ㄨゃ傛墍浠ヨ佸帇緙╀箣鍚庤川閲忓敖鍙鑳芥帴榪500k鐨勩500k鍍忕礌浠ュ唴,灝辨槸鑻ヤ竴寮犲浘瀹藉害涓1024,鍒欓珮搴︿笉鑳借秴榪500銆傚洜涓哄浘鐗囨湁鍏朵粬鐨勪俊鎮,涔熸槸瑕佸崰澶у皬鐨勩傚嵆涓嶅緱澶т簬

1024*500

鎵浠,鏍規嵁闇奼,涓婁紶鍥劇墖涓嶈兘瓚呰繃500k鐨勬儏鍐典笅灝藉彲鑳戒繚鐣欏浘鐗囩殑娓呮櫚搴︺傚綋鐒跺傛灉鍙浠ョ殑鎯呭喌涓嬬敤涓婇潰鎻愬埌鐨勮劇疆鍘嬬緝紼嬪害涓0.9,0.8璇曡瘯鐪,鍥劇墖璐ㄩ噺鍙浠ユ帴鍙,澶у皬浼氭湁澶у箙搴︾殑緙╁皬銆

濡傛灉涓嶅帇緙,闈犺皟鏁村浘鐗囬暱瀹藉幓鎺у埗涓婁紶澶у皬鍛?

鍘熺悊寰堢畝鍗,灝辨槸闈犱笉鏂鍦扮緝灝忛檺瀹氱殑鏈澶у介珮,鐩村埌鏈緇堥暱瀹界殑縐灝忎簬瑙勫畾鐨勫ぇ灝忋

榪欑嶆柟娉曟湁鍙鑳芥渶鍚庡緱鍑虹殑鍥劇墖鐨勫ぇ灝忎細鐣ュぇ浜庤勫畾澶у皬,鍘熷洜涓婃枃涔熸彁鍒拌繃浜,濡傛灉鎯充嬌鐢ㄨ繖縐嶆柟娉,鍙鑷琛屽啀璋冩暣涓涓嬨

涓婇潰鐨勬柟娉曟湁涓闂棰,灝辨槸鏀瑰彉浜嗗浘鐗囩殑鍘熷嬮暱瀹姐傚傛灉涓涓鍥劇殑闀垮借凍澶熷ぇ,鍘嬬緝鍥劇墖璐ㄩ噺,緋婁竴鐐逛絾鏄鍐呭圭湅寰楁竻涔熸槸ok鐨勫槢銆傛墍浠,璺熶笂闈㈠悓鐞,鎴戜滑鍙浠ヤ笉鏂璋冩暣鍥劇墖鐨勮川閲忚懼畾鐩村埌澶у皬鍚堥,閭d箞,濡備綍鍦ㄥ浘鐗囦笂浼犱箣鍓嶇煡閬撳浘鐗囩殑澶у皬鍛?

棣栧厛,闇瑕佺煡閬撶殑涓鐐規槸,鍘嬬緝涔嬪悗鎷垮埌鐨刡ase64瀛楃︿覆浼氳漿鎴恇lob瀵硅薄,鐒跺悗浼犵粰鏈嶅姟絝銆

鍙浠ユ煡闃呮枃妗,blob瀵硅薄鏈変釜灞炴ф槸size

榪欎釜size灝辨槸涓婁紶涔嬪悗瀹為檯鐨勬枃浠跺ぇ灝忋

鍙傜収涓婇潰鐨勬濊礬,鍙浠ユ瘡嬈℃敼鍙('image/'+fileType,level);level鐨勫,鍘昏皟鏁村帇緙╁浘鐗囪川閲,鐒跺悗鐢╞lob瀵硅薄鐨剆ize鍘婚獙璇佹槸鍚︽弧瓚500k浠ュ唴鐨勯渶奼傘

鍏充簬鐨刲evel鍒板簳鏄鎬庝箞璁$畻鐨,MDN鏂囨。閲屼篃娌¤,鍐欎簡涓寰鐜涓嬈″噺灝0.1鐨刲evel鍘嬬緝浜嗗嚑涓鍥劇墖

鐢ㄥ姞鍑忎箻闄ょ畻浜嗕竴涓,娌℃壘鍒拌勫緥,鏁板︿笉濂芥斁寮冧簡(榪欎釜涓滆タ濂藉儚涔熶笉鏄鑳借傚療鍑烘潵鐨,鐪嬬粨鏋滆窡鍒濆嬪ぇ灝忔病鍟ュ叧緋)銆

榪欓噷瑕佹敞鎰忕殑鏄,鏈夊彲鑳介亣鍒拌秴澶у浘鐗,0.1鐨刲evel鍙鑳戒笉瓚充互鍘嬬緝鍒500k,鎵浠ュ皬浜0.1鐨勬椂鍊,鏀瑰彉level閫掑噺鐨勫樊鍊肩戶緇鍘嬬緝涓嬪幓

鍦ㄥ紑濮嬫帴鏀跺埌鍥劇墖鐨勬椂鍊欑粰涓涓猯oading澧炲姞鐢ㄦ埛鐨勮愬績濂戒簡,loading涓囧瞾~

鍏跺疄鍗曠函鐨勫帇緙╄川閲忛亣鍒扮◢澶х殑鍥劇墖,浼氬艱嚧欏甸潰楂橀戣$畻,鐒跺悗欏甸潰鍩烘湰灝辯敤涓嶄簡浜--銆傛湁灝濊瘯榪囩敤iphone鐨勪竴涓灞忓箷鎴鍥(10M宸﹀彸),鍘嬬殑鏃跺欑◢榪囦竴浼,鏁翠釜鎵嬫満閮藉湪鍙戠儷,鍙鑳芥潃榪涚▼銆

鎵浠,鑻ュ歸暱搴︽病鏈夌壒孌婄殑闄愬埗,鍙浠ュ仛涓涓緙╂斁,鍘誨姞蹇鍘嬬緝鐨勮繘搴,鎻愰珮鑳藉帇緙╃殑鍥劇墖澶у皬涓婇檺銆

欏甸潰鍒頒簡ios涓婅繕鏄涓嶈--,鍙浠ョ湅鍒版渶鍚庡浘鐗噇evel涓0.001,鏈闀胯竟涓764銆

闂棰樿繕鏄寰鐜嬈℃暟榪樻槸榪囧,璁$畻棰戠巼澶楂樸備粠鍥句腑鍙鐪嬪嚭,瀵逛簬澶у浘鏉ヨ,鍒濆嬭懼畾鐨刲evel鍜屽浘鐗囧昂瀵歌繃浜庡芥澗,鍙浠ヤ紭鍖栦竴涓嬪垵濮媗evel鍜屽昂瀵搞

鏈夌殑鏃跺欒繕浼氶亣鍒頒竴寮犲浘鐗囨棤璁哄備綍涔熷帇涓嶅埌500k,灝辨槸涓婁竴嬈″拰榪欐$殑鍘嬬緝鍚庡ぇ灝忔病鏈夊彉鍖,榪欑嶆儏鍐甸渶瑕佹姏閿,涓嶈╁驚鐜緇х畫銆

澶у浘鐗囩殑絳夊緟鏃墮棿紼嶉暱,鍙浠ョ粰鐢ㄦ埛鍏堥勮堜竴涓猙ase64鐨勫浘鐗囧炲姞絳夊緟鑰愬績,鏂規硶鍚嶄負getImgBase64,榪欓噷閮戒竴騫剁粰鍑轟簡

瑙e喅鐨勯殣鎮:涓婇潰榪欎釜鏂規堜細鍑虹幇鎴戦渶瑕佷竴涓500k鐨勭収鐗,鍘嬪埌浜520k涔嬪悗,鍐嶅帇浜嗕竴嬈°傛湁鏃跺欒繖鏈鍚庣殑涓嬈′細鐗瑰埆澶稿紶,鐩存帴灝嗗浘鐗囧紕鍒頒簡鍑犲嶮k銆

鍙傝冧簡:

榪欎釜搴撻噷闈㈡湁涓鏂規硶compressAccurately,榪欎釜鏂規硶鍙浠ユ瘮杈冪簿鍑嗗湴鍘嬬緝銆傚伔鍋風炕浜嗕竴涓嬫簮鐮併

鍏跺疄涓婁竴涓鏂規堢殑鐥涚偣灝卞湪浜,濡備綍鍦ㄦ瘡涓涓鍘嬬緝寰鐜閲屽勭悊灝哄稿拰鍘嬬緝姣斾緥銆

鎬葷粨

濡傛湁綰版紡,嬈㈣繋鎸囨

java濡備綍瀹炵幇鎶婁竴涓澶у浘鐗囧帇緙╁埌鎸囧畾澶у皬鐨勫浘鐗囦笖闀垮芥瘮涓嶅彉錛

java瑕佸疄鐜版妸涓涓澶у浘鐗囧帇緙╁埌鎸囧畾澶у皬鐨勫浘鐗囦笖闀垮芥瘮涓嶅彉鍙浠ュ皾璇曚互涓嬫搷浣:

寤虹珛涓涓獮ffineTransform

AffineTransform(doublem00,doublem10,doublem01,doublem11,doublem02,doublem12)

杞鎹㈢煩闃,緙╂斁姣旇緝綆鍗(鐭╅樀鍙浠ュ共寰堝氫簨鎯,鎯沖仛鍥懼儚澶勭悊杞浠跺彲浠ョ爺絀朵笅)

[x'][m00m01m02][x][m00x+m01y+m02]

[y']=[m10m11m12][y]=[m10x+m11y+m12]

[1][001][1][1]

10鍊嶆瘮杈冮毦綆(鏍瑰彿10鍟,褰撶劧浣犳兂綆椾篃琛),9鍊嶅ソ鐐(9鐨勫紑鏂規槸3),m00涓1/3,m01涓0,m02涓0,m10涓0,m11涓1/3,m12涓0銆

鍐嶅緩涓涓獮ffineTransformOp,鎶婁笂闈㈢殑杞鎹浼犺繘鍘

AffineTransformOp(AffineTransformxform,intinterpolationType)

鏈鍚庤皟鐢ˋffineTransformOp鐨凚ufferedImagefilter(BufferedImagesrc,BufferedImagedst),src浼犲師鍥劇墖,榪斿洖鍊煎氨鏄鎯寵佺殑Image,娉ㄦ剰鏄榪斿洖鍊,涓嶆槸dst,涓嶆槑鐧藉彲浠ョ湅涓婮avaAPI

java濡備綍瀹炵幇鎶婁竴涓澶у浘鐗囧帇緙╁埌鎸囧畾澶у皬鐨勫浘鐗囦笖闀垮芥瘮涓嶅彉錛

java瑕佸疄鐜版妸涓涓澶у浘鐗囧帇緙╁埌鎸囧畾澶у皬鐨勫浘鐗囦笖闀垮芥瘮涓嶅彉鍙浠ュ皾璇曚互涓嬫搷浣:

寤虹珛涓涓獮ffineTransform

AffineTransform(doublem00,doublem10,doublem01,doublem11,doublem02,doublem12)

杞鎹㈢煩闃,緙╂斁姣旇緝綆鍗(鐭╅樀鍙浠ュ共寰堝氫簨鎯,鎯沖仛鍥懼儚澶勭悊杞浠跺彲浠ョ爺絀朵笅)

[x'][m00m01m02][x][m00x+m01y+m02]

[y']=[m10m11m12][y]=[m10x+m11y+m12]

[1][001][1][1]

10鍊嶆瘮杈冮毦綆(鏍瑰彿10鍟,褰撶劧浣犳兂綆椾篃琛),9鍊嶅ソ鐐(9鐨勫紑鏂規槸3),m00涓1/3,m01涓0,m02涓0,m10涓0,m11涓1/3,m12涓0銆

鍐嶅緩涓涓獮ffineTransformOp,鎶婁笂闈㈢殑杞鎹浼犺繘鍘

AffineTransformOp(AffineTransformxform,intinterpolationType)

鏈鍚庤皟鐢ˋffineTransformOp鐨凚ufferedImagefilter(BufferedImagesrc,BufferedImagedst),src浼犲師鍥劇墖,榪斿洖鍊煎氨鏄鎯寵佺殑Image,娉ㄦ剰鏄榪斿洖鍊,涓嶆槸dst,涓嶆槑鐧藉彲浠ョ湅涓婮avaAPI

❼ java實現圖片預覽功能,可以顯示縮列圖,具有上下頁的功能求技術支持

把圖片按照規定的比例壓縮,然後保存至FTP,列表讀取縮略圖,單擊顯示原圖。

/**
*壓縮圖片方法一(高質量)
*@paramoldFile將要壓縮的圖片
*@paramwidth壓縮寬
*@paramheight壓縮高
*@paramsmallIcon壓縮圖片後,添加的擴展名(在圖片後綴名前添加)
*@paramquality壓縮質量范圍:<i>0.0-1.0</i>高質量:<i>0.75</i>中等質量:<i>0.5</i>低質量:<i>0.25</i>
*@parampercentage是否等比壓縮若true寬高比率將將自動調整
*/
publicstaticvoidcompressImage(StringoldFile,intwidth,intheight,StringsmallIcon,
floatquality,booleanpercentage){
try{
Filefile=newFile(oldFile);

//驗證文件是否存在
if(!file.exists())
thrownewFileNotFoundException("找不到原圖片!");

//獲取圖片信息
BufferedImageimage=ImageIO.read(file);
intorginalWidth=image.getWidth();
intorginalHeight=image.getHeight();

//驗證壓縮圖片信息
if(width<=0||height<=0||!Pattern.matches("^[1-9]\d*$",String.valueOf(width))
||!Pattern.matches("^[1-9]\d*$",String.valueOf(height)))
thrownewException("圖片壓縮後的高寬有誤!");

//等比壓縮
if(percentage){
doublerate1=((double)orginalWidth)/(double)width+0.1;
doublerate2=((double)orginalHeight)/(double)height+0.1;
doublerate=rate1>rate2?rate1:rate2;
width=(int)(((double)orginalWidth)/rate);
height=(int)(((double)orginalHeight)/rate);
}

//壓縮後的文件名
StringfilePrex=oldFile.substring(0,oldFile.lastIndexOf('.'));
StringnewImage=filePrex+smallIcon+oldFile.substring(filePrex.length());

//壓縮文件存放位置
FilesavedFile=newFile(newImage);

//創建一個新的文件
savedFile.createNewFile();

//創建原圖像的縮放版本
Imageimage2=image.getScaledInstance(width,height,Image.SCALE_AREA_AVERAGING);

//創建數據緩沖區圖像
BufferedImagebufImage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

//創建一個Graphics2D
Graphics2Dg2=bufImage.createGraphics();

//重繪圖像
g2.drawImage(image2,0,0,width,height,null);
g2.dispose();

//過濾像素矩陣
float[]kernelData={
-0.125f,-0.125f,-0.125f,
-0.125f,2,-0.125f,-0.125f,
-0.125f,-0.125f};
Kernelkernel=newKernel(3,3,kernelData);

//按核數學源圖像邊緣的像素復制為目標中相應的像素輸出像素
ConvolveOpcOp=newConvolveOp(kernel,ConvolveOp.EDGE_NO_OP,null);

//轉換像素
bufImage=cOp.filter(bufImage,null);

FileOutputStreamout=newFileOutputStream(savedFile);
JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParamparam=encoder.getDefaultJPEGEncodeParam(bufImage);

//設置壓縮質量
param.setQuality(quality,true);
encoder.encode(bufImage,param);

out.close();
System.out.println(newImage);
}catch(Exceptione){
e.printStackTrace();
System.out.println("壓縮失敗!"+e.getMessage());
}
}
閱讀全文

與bufferedimage圖片壓縮相關的資料

熱點內容
加密裁判怎麼做 瀏覽:578
app更新怎麼選擇更新途徑 瀏覽:786
什麼叫專屬獨立伺服器 瀏覽:309
程序員學吉他的好處 瀏覽:708
重要的文件夾刪除了怎麼找回 瀏覽:372
ecshop源碼論壇 瀏覽:593
編譯原理DAG例子 瀏覽:164
光谷程序員的酒店 瀏覽:8
客戶端密碼存在文件夾哪個位置 瀏覽:380
怎麼把程序員的工作說的高大上 瀏覽:723
解壓包如何加密 瀏覽:158
蘋果app隱私報告怎麼關 瀏覽:668
單片機什麼程度能接項目 瀏覽:698
內核編譯小米5s 瀏覽:554
加密機可以接多少系統 瀏覽:904
python函數返回值返回元組 瀏覽:650
單片機按鍵代碼 瀏覽:720
步步高手機門禁卡加密 瀏覽:22
學習python的最好方法 瀏覽:777
linuxgpio應用 瀏覽:686