1. 程式人生 > 程式設計 >java高質量縮放圖片的示例程式碼

java高質量縮放圖片的示例程式碼

可按照比例縮放,也可以指定寬高

import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import javax.swing.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.Kernel;
import java.awt.image.ConvolveOp;
 
public class ImageUtil {
   /**
   * 
   * @param originalFile 原檔案
   * @param resizedFile 壓縮目標檔案
   * @param newWidth 壓縮後的圖片寬度
   * @param quality 壓縮質量(0到1之間,越高質量越好)
   * @throws IOException
   */

	public static void resize(File originalFile,File resizedFile,int newWidth,float quality) throws IOException {
 
		if (quality > 1) {
			throw new IllegalArgumentException(
					"Quality has to be between 0 and 1");
		}
 
		ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath());
		Image i = ii.getImage();
		Image resizedImage = null;
 
		int iWidth = i.getWidth(null);
		int iHeight = i.getHeight(null);
        //比例縮放
		if (iWidth > iHeight) {
			resizedImage = i.getScaledInstance(newWidth,(newWidth * iHeight)
					/ iWidth,Image.SCALE_SMOOTH);
		} else {
			resizedImage = i.getScaledInstance((newWidth * iWidth) / iHeight,newWidth,Image.SCALE_SMOOTH);
		}
        //指定寬高
		Image temp = new ImageIcon(resizedImage).getImage();
		// Create the buffered image.
        BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null),temp.getHeight(null),BufferedImage.TYPE_INT_RGB);
		// Copy image to buffered image.
        Graphics g = bufferedImage.createGraphics();
		// Clear background and paint the image.
		g.setColor(Color.white);
		g.fillRect(0,temp.getWidth(null),temp.getHeight(null));
		g.drawImage(temp,null);
		g.dispose();
 
		// Soften.
		float softenFactor = 0.05f;
		float[] softenArray = { 0,softenFactor,1 - (softenFactor * 4),0 };
		Kernel kernel = new Kernel(3,3,softenArray);
		ConvolveOp cOp = new ConvolveOp(kernel,ConvolveOp.EDGE_NO_OP,null);
		bufferedImage = cOp.filter(bufferedImage,null);
 
		// Write the jpeg to a file.
		FileOutputStream out = new FileOutputStream(resizedFile);
 
		// Encodes image as a JPEG data stream
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
 
		JPEGEncodeParam param = encoder
				.getDefaultJPEGEncodeParam(bufferedImage);
 
		param.setQuality(quality,true);
 
		encoder.setJPEGEncodeParam(param);
		encoder.encode(bufferedImage);
	} // Example usage
 
	public static void main(String[] args) throws IOException {
		 File originalImage = new File("C:P7.gif");
		 resize(originalImage,new File("c:P7-0.jpg"),150,0.7f);
		 resize(originalImage,new File("c:P7-1.jpg"),1f);
	}
}

以上就是java高質量縮放圖片的示例程式碼的詳細內容,更多關於Java 縮放圖片的資料請關注我們其它相關文章!