程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 圖片縮放與轉換

圖片縮放與轉換

編輯:關於JAVA

通過對圖片重繪,達到圖片縮放、壓縮編碼轉換功能。

Java代碼

import java.awt.Image;
import java.awt.image.BufferedImage;
import  java.awt.image.RenderedImage;
import java.io.File;
import  java.io.InputStream;
import java.io.OutputStream;
import  javax.imageio.ImageIO;
/**
 *
 * @author 梁棟
 * @version 1.0
 *  @since 1.0
 */
public abstract class ImageUtils {
/**
 * 縮放圖片
  *
 * @param width
 *      輸出寬度
 * @param height
 *       輸出高度
 * @param input
 *      輸入流
 * @param output
 *       輸出流
 * @param format
 *      輸出格式
 * @return
 *  @throws Exception
 */
public static boolean convert(int width, int height,  InputStream input,

OutputStream output, String format) throws Exception  {
// 輸入
BufferedImage inputImage = ImageIO.read(input);
// 轉換
RenderedImage im = (RenderedImage) convert(height, height, inputImage);
// 輸 出
return ImageIO.write(im, format, output);
}

/**
 * 轉換壓縮算法
 *
 * @param input
 *      輸入文件
 * @param output
 *       輸出文件
 * @return
 * @throws Exception
 */
public static boolean  convert(File input, File output) throws Exception {
// 輸入
BufferedImage  inputImage = ImageIO.read(input);

// 轉換
int width = inputImage.getWidth ();
int height = inputImage.getHeight();

RenderedImage im = (RenderedImage)  convert(width, height, inputImage);
String outputFilename = output.getName ();
String format = outputFilename.substring(outputFilename

.lastIndexOf('.')  + 1);
// 輸出
return ImageIO.write(im, format, output);
}

/**
 *  縮放圖片
 *
 * @param width
 *      輸出寬度
 * @param height
 *      輸出高度
 * @param input
 *      輸入文件
 * @param  output
 *      輸出文件
 * @return
 * @throws Exception
  */
public static boolean convert(int width, int height, File input, File  output)

throws Exception {
// 輸入
BufferedImage inputImage =  ImageIO.read(input);
// 轉換
RenderedImage im = (RenderedImage) convert(width,  height, inputImage);
String outputFilename = output.getName();
String format =  outputFilename.substring(outputFilename

.lastIndexOf('.') + 1);
// 輸出
return ImageIO.write(im, format, output);
}

/**
 * 縮放圖片
 *
 * @param width
 *      輸出寬度
 * @param height
 *      輸出 高度
 * @param input
 *      輸入路徑
 * @param output
 *       輸出路徑
 * @return
 * @throws Exception
 */
public static boolean  convert(int width, int height, String inputPath,

String outputPath) throws  Exception {
return convert(width, height, new File(inputPath), new File (outputPath));
}

/**
 * 轉換
 *
 * @param width
 *       輸出寬度
 * @param height
 *      輸出高度
 * @param input
 *       BufferedImage
 * @return BufferedImage
 * @throws Exception
  */
private static BufferedImage convert(int width, int height,

BufferedImage  input) throws Exception {
// 初始化輸出圖片
BufferedImage output = new  BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

// 重新繪圖
Image image = input.getScaledInstance(output.getWidth(), output

.getHeight(),  output.getType());

output.createGraphics().drawImage(image, null,  null);

return output;
}

/**
 * 等比縮放圖片
 *
 * @param  width
 *      輸出寬度
 * @param height
 *      輸出高度
 *  @param input
 *      輸入流
 * @param output
 *      輸出流
  * @return
 * @throws Exception
 */
public static boolean  equimultipleConvert(int width, int height,

String input, String output) throws  Exception {
return equimultipleConvert(width, height, new File(input), new File (

output));
}

/**
 * 等比縮放圖片
 *
 * @param width
 *       輸出寬度
 * @param height
 *      輸出高度
 * @param  input
 *      輸入流
 * @param output
 *      輸出流
 *  @return
 *
 * @throws Exception
 */
public static boolean  equimultipleConvert(int width, int height,

File input, File output) throws  Exception {
// 輸入
BufferedImage image = ImageIO.read(input);

// 重新核 算尺寸
if (image.getWidth() > 0 && image.getHeight() > 0)  {

if ((image.getWidth() / image.getHeight()) >= (width / height))  {

if (image.getWidth() > width) {

height = (image.getHeight() *  width) / image.getWidth();

} else {

width = image.getWidth ();

height = image.getHeight();

}

} else {

if  (image.getHeight() > height) {

width = (image.getWidth() * height) /  image.getHeight();

} else {

width = image.getWidth();

height =  image.getHeight();

}

}
}

// 轉換 輸出
return convert(width,  height, input, output);
}
}

給出一個簡單的測試類:

Java代碼

import org.junit.Test;
/**
 *
 * @author 梁棟
 * @version  1.0
 * @since 1.0
 */
public class ImageUtilsTest {

/**
 * Test  method for
 * {@link org.zlex.common.image.ImageUtils#main(java.lang.String [])}.
 */
@Test
public void test() throws Exception {
System.out.println (ImageUtils.convert(1650, 1024,  "c:\\1.png",

"c:\\1.png.jpg"));
System.out.println(ImageUtils.convert(400, 300,  "c:\\1.jpg",

"c:\\1.jpg.jpg"));
System.out.println(ImageUtils.convert(400, 300,  "c:\\1.jpg",

"c:\\1.jpg.png"));
System.out.println(ImageUtils.convert(50, 50,  "c:\\1.jpg",

"c:\\1.jpg.gif"));
System.out.println(ImageUtils.convert(40, 30,  "c:\\1.bmp",

"c:\\1.bmp.gif"));
System.out.println(ImageUtils

.convert (40, 30, "c:\\1.bmp", "c:\\1.jpeg"));
System.out.println (ImageUtils.equimultipleConvert(1600, 1400, new File(

"c:\\1.bmp"), new File ("c:\\1Equimultiple.jpeg")));

}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved