導航:首頁 > 文件處理 > bufferedimage取消壓縮

bufferedimage取消壓縮

發布時間:2022-04-30 17:42:53

java:Image和BufferedImage的區別是什麼

Image是一個抽象類,BufferedImage是Image的實現類。
Image和BufferedImage的主要作用就是將一副圖片載入到內存中。
BufferedImage 子類描述具有可訪問圖像數據緩沖區的 Image。BufferedImage 由圖像數據的 ColorModel 和 Raster 組成。Raster 的 SampleModel 中 band 的數量和類型必須與 ColorModel 所要求的數量和類型相匹配,以表示其顏色和 alpha 分量。所有 BufferedImage 對象的左上角坐標都為 (0, 0)。因此,用來構造 BufferedImage 的任何 Raster 都必須滿足:minX=0 且 minY=0。

Java將一副圖片載入到內存中的方法是:

String imgPath = "D://demo.bmp";
BufferedImage image = ImageIO.read(new FileInputStream(imgPath));

該方法BufferedImage 可以獲得圖片的詳細信息,例如:獲得圖片的寬度:image.getWidth(null);圖片只有載入內存中才能對圖片進行進一步的處理。

Ⅱ 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的bufferedimage對象

java 中對象的回收不像C++要手動回收。系統會根據當前內存的消耗情況自動調用,垃圾回器回收。具體回收哪些,不受程序控制。不過一般會回收一些沒有引用指向的內存。就是那這個對象的引用值為null。前提和這個對象一樣引用同一塊內存的引用都值為null.系統發現這塊內存地址沒用了,就會回收。你可以手動調用gc回收,但是不能控制回收哪些。你這個對象用完後值為null就行。

Ⅳ java 中關於BufferedImage的使用

gr.drawImage(bufferedImage,j*30,i*30,30,30,Color.WHITE,null);
null這個參數不對吧,好象是當前窗口的對象.

Ⅳ 我用BufferedImage方法讀入了一張圖片,現在我想將這張圖片改變成640*380的大小再使用,該怎麼辦

可以用 java.awt.geom.AffineTransform , 具體方法如下.
(width是新的長度,height是新的高度,image是改變大小之後的圖片,source是原本從文件中讀入的圖片)

int width = 640;
int height = 380;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
AffineTransform at = AffineTransform.getScaleInstance(
(double) width / source.getWidth(),
(double) height / source.getHeight());
g.drawRenderedImage(source, at);

Ⅵ java BufferedImage 內存無法回收是怎麼回事

因為你是在同一個方法中 sleep ,如果程序中有使用內存大的語句,在使用完成後,需要手工將內存釋放,

BufferedImage b1 = new ....

使用完後:

b1 = null

這樣,JVM 就會知道 b1 的內存可以回收了。

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

壓縮太厲害了吧,75試試

Ⅷ JAVA與圖像壓縮

此篇轉載。
----------------------------------------------------------------------
下面是一段給圖片加上網站logo的代碼,注意第12,13,14行設置了圖片的壓縮比。本例為不壓縮原圖片。

java 代碼

BufferedImage image = ImageIO.read(new FileInputStream("c:\\base.jpg"));
//讀取圖標
BufferedImage image_biao = ImageIO.read(new FileInputStream(
"c:\\logo.gif"));
Graphics2D g = image.createGraphics();
g.drawImage(image_biao, 10, 10, image_biao.getWidth(null),
image_biao.getHeight(null), null);
g.dispose();
FileOutputStream out = new FileOutputStream("c:\\out.jpg");

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);
param.setQuality(1f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(image);
out.close();

setQuality

public void setQuality(float quality, boolean forceBaseline)

quality取值在 1.0 到 0.0 之間

Some guidelines: 0.75 high quality 0.5 medium quality 0.25 low quality

另外要得到一張指定高度和寬度的圖片的話可以用以下代碼:(接上面代碼)

java 代碼

BufferedImage tag = new BufferedImage(500, 300,image.getType());
tag.getGraphics().drawImage(image, 0, 0, 500, 300, null); //繪制縮小後的圖

FileOutputStream out2 = new FileOutputStream("c:\\out2.jpg");

JPEGImageEncoder encoder2 = JPEGCodec.createJPEGEncoder(out2);
JPEGEncodeParam param2 = encoder.getDefaultJPEGEncodeParam(tag);
param2.setQuality(1f, false);
encoder2.setJPEGEncodeParam(param2);
encoder2.encode(tag);
out2.close();

注意第一行新建 BufferedImage 的時候要使用原圖片的type,這樣可以保證輸出與原圖片相同質量的圖片。

Ⅸ java BufferedImage 如何使圖像更小

貌似處理2D圖形縮放用的是AffineTransform,在JDK文檔(我看的中文的哈)里有詳細的參數解釋,只要學過數組相乘就行了。
此矩陣將源坐標 (x,y) 變換為目標坐標 (x',y'),這一過程將坐標視為列向量,並用矩陣乘以坐標向量,步驟如下:

[ x'] [ m00 m01 m02 ] [ x ] [ m00x + m01y + m02 ]
[ y'] = [ m10 m11 m12 ] [ y ] = [ m10x + m11y + m12 ]
[ 1 ] [ 0 0 1 ] [ 1 ] [ 1 ]
方法TYPE_MASK_SCALE可以進行縮放操作,主要是要會算哈,不會就去學線性代數,很簡單的

Ⅹ java 圖片的壓縮

前面是轉成JPG再轉出

後面是直接輸出

閱讀全文

與bufferedimage取消壓縮相關的資料

熱點內容
卡爾曼濾波演算法書籍 瀏覽:768
安卓手機怎麼用愛思助手傳文件進蘋果手機上 瀏覽:843
安卓怎麼下載60秒生存 瀏覽:802
外向式文件夾 瀏覽:235
dospdf 瀏覽:430
怎麼修改騰訊雲伺服器ip 瀏覽:387
pdftoeps 瀏覽:492
為什麼鴻蒙那麼像安卓 瀏覽:735
安卓手機怎麼拍自媒體視頻 瀏覽:185
單片機各個中斷的初始化 瀏覽:723
python怎麼集合元素 瀏覽:480
python逐條解讀 瀏覽:832
基於單片機的濕度控制 瀏覽:498
ios如何使用安卓的帳號 瀏覽:882
程序員公園采訪 瀏覽:811
程序員實戰教程要多長時間 瀏覽:974
企業數據加密技巧 瀏覽:134
租雲伺服器開發 瀏覽:813
程序員告白媽媽不同意 瀏覽:335
攻城掠地怎麼查看伺服器 瀏覽:600