可實現以下常用功能
代碼如下 復制代碼
import java
import java
import java
import java
import java
import java
import java
import java
import java
import java
import java
import java
import java
import java
import java
import java
import java
import javax
/**
* 圖片處理工具類
* 功能
* @author Administrator
*/
public class ImageUtils {
/**
* 幾種常見的圖片格式
*/
public static String IMAGE_TYPE_GIF = "gif";// 圖形交換格式
public static String IMAGE_TYPE_JPG = "jpg";// 聯合照片專家組
public static String IMAGE_TYPE_JPEG = "jpeg";// 聯合照片專家組
public static String IMAGE_TYPE_BMP = "bmp";// 英文Bitmap(位圖)的簡寫
public static String IMAGE_TYPE_PNG = "png";// 可移植網絡圖形
public static String IMAGE_TYPE_PSD = "psd";// Photoshop的專用格式Photoshop
/**
* 程序入口
* @param args
*/
public static void main(String[] args) {
//
// 方法一
ImageUtils
// 方法二
ImageUtils
//
// 方法一
ImageUtils
// 方法二
ImageUtils
// 方法三
ImageUtils
//
ImageUtils
//
ImageUtils
//
// 方法一
ImageUtils
// 方法二
ImageUtils
//
ImageUtils
}
/**
* 縮放圖像(按比例縮放)
* @param srcImageFile 源圖像文件地址
* @param result 縮放後的圖像地址
* @param scale 縮放比例
* @param flag 縮放選擇:true 放大; false 縮小;
*/
public final static void scale(String srcImageFile
int scale
try {
BufferedImage src = ImageIO
int width = src
int height = src
if (flag) {// 放大
width = width * scale;
height = height * scale;
} else {// 縮小
width = width / scale;
height = height / scale;
}
Image image = src
Image
BufferedImage tag = new BufferedImage(width
BufferedImage
Graphics g = tag
g
g
ImageIO
} catch (IOException e) {
e
}
}
/**
* 縮放圖像(按高度和寬度縮放)
* @param srcImageFile 源圖像文件地址
* @param result 縮放後的圖像地址
* @param height 縮放後的高度
* @param width 縮放後的寬度
* @param bb 比例不對時是否需要補白
*/
public final static void scale
try {
double ratio =
File f = new File(srcImageFile);
BufferedImage bi = ImageIO
Image itemp = bi
// 計算比例
if ((bi
if (bi
ratio = (new Integer(height))
/ bi
} else {
ratio = (new Integer(width))
}
AffineTransformOp op = new AffineTransformOp(AffineTransform
itemp = op
}
if (bb) {//補白
BufferedImage image = new BufferedImage(width
BufferedImage
Graphics
g
g
if (width == itemp
g
itemp
Color
else
g
itemp
Color
g
itemp = image;
}
ImageIO
} catch (IOException e) {
e
}
}
/**
* 圖像切割(按指定起點坐標和寬高切割)
* @param srcImageFile 源圖像地址
* @param result 切片後的圖像地址
* @param x 目標切片起點坐標X
* @param y 目標切片起點坐標Y
* @param width 目標切片寬度
* @param height 目標切片高度
*/
public final static void cut(String srcImageFile
int x
try {
// 讀取源圖像
BufferedImage bi = ImageIO
int srcWidth = bi
int srcHeight = bi
if (srcWidth >
Image image = bi
Image
// 四個參數分別為圖像起點坐標和寬高
// 即: CropImageFilter(int x
ImageFilter cropFilter = new CropImageFilter(x
Image img = Toolkit
new FilteredImageSource(image
cropFilter));
BufferedImage tag = new BufferedImage(width
Graphics g = tag
g
g
// 輸出為文件
ImageIO
}
} catch (Exception e) {
e
}
}
/**
* 圖像切割(指定切片的行數和列數)
* @param srcImageFile 源圖像地址
* @param descDir 切片目標文件夾
* @param rows 目標切片行數
* @param cols 目標切片列數
*/
public final static void cut
int rows
try {
if(rows<=
if(cols<=
// 讀取源圖像
BufferedImage bi = ImageIO
int srcWidth = bi
int srcHeight = bi
if (srcWidth >
Image img;
ImageFilter cropFilter;
Image image = bi
int destWidth = srcWidth; // 每張切片的寬度
int destHeight = srcHeight; // 每張切片的高度
// 計算切片的寬度和高度
if (srcWidth % cols ==
destWidth = srcWidth / cols;
} else {
destWidth = (int) Math
}
if (srcHeight % rows ==
destHeight = srcHeight / rows;
} else {
destHeight = (int) Math
}
// 循環建立切片
// 改進的想法:是否可用多線程加快切割速度
for (int i =
for (int j =
// 四個參數分別為圖像起點坐標和寬高
// 即: CropImageFilter(int x
cropFilter = new CropImageFilter(j * destWidth
destWidth
img = Toolkit
new FilteredImageSource(image
cropFilter));
BufferedImage tag = new BufferedImage(destWidth
destHeight
Graphics g = tag
g
g
// 輸出為文件
ImageIO
+ "_r" + i + "_c" + j + "
}
}
}
} catch (Exception e) {
e
}
}
/**
* 圖像切割(指定切片的寬度和高度)
* @param srcImageFile 源圖像地址
* @param descDir 切片目標文件夾
* @param destWidth 目標切片寬度
* @param destHeight 目標切片高度
*/
public final static void cut
int destWidth
try {
if(destWidth<=
if(destHeight<=
// 讀取源圖像
BufferedImage bi = ImageIO
int srcWidth = bi
int srcHeight = bi
if (srcWidth > destWidth && srcHeight > destHeight) {
Image img;
ImageFilter cropFilter;
Image image = bi
int cols =
int rows =
// 計算切片的橫向和縱向數量
if (srcWidth % destWidth ==
cols = srcWidth / destWidth;
} else {
cols = (int) Math
}
if (srcHeight % destHeight ==
rows = srcHeight / destHeight;
} else {
rows = (int) Math
}
// 循環建立切片
// 改進的想法:是否可用多線程加快切割速度
for (int i =
for (int j =
// 四個參數分別為圖像起點坐標和寬高
// 即: CropImageFilter(int x
cropFilter = new CropImageFilter(j * destWidth
destWidth
img = Toolkit
new FilteredImageSource(image
cropFilter));
BufferedImage tag = new BufferedImage(destWidth
destHeight
Graphics g = tag
g
g
// 輸出為文件
ImageIO
+ "_r" + i + "_c" + j + "
}
}
}
} catch (Exception e) {
e
}
}
/**
* 圖像類型轉換
* @param srcImageFile 源圖像地址
* @param formatName 包含格式非正式名稱的 String
* @param destImageFile 目標圖像地址
*/
public final static void convert(String srcImageFile
try {
File f = new File(srcImageFile);
f
f
BufferedImage src = ImageIO
ImageIO
} catch (Exception e) {
e
}
}
/**
* 彩色轉為黑白
* @param srcImageFile 源圖像地址
* @param destImageFile 目標圖像地址
*/
public final static void gray(String srcImageFile
try {
BufferedImage src = ImageIO
ColorSpace cs = ColorSpace
ColorConvertOp op = new ColorConvertOp(cs
src = op
ImageIO
} catch (IOException e) {
e
}
}
/**
* 給圖片添加文字水印
* @param pressText 水印文字
* @param srcImageFile 源圖像地址
* @param destImageFile 目標圖像地址
* @param fontName 水印的字體名稱
* @param fontStyle 水印的字體樣式
* @param color 水印的字體顏色
* @param fontSize 水印的字體大小
* @param x 修正值
* @param y 修正值
* @param alpha 透明度
*/
public final static void pressText(String pressText
String srcImageFile
int fontStyle
int y
try {
File img = new File(srcImageFile);
Image src = ImageIO
int width = src
int height = src
BufferedImage image = new BufferedImage(width
BufferedImage
Graphics
g
g
g
g
alpha));
// 在指定坐標繪制水印文字
g
/
g
ImageIO
} catch (Exception e) {
e
}
}
/**
* 給圖片添加文字水印
* @param pressText 水印文字
* @param srcImageFile 源圖像地址
* @param destImageFile 目標圖像地址
* @param fontName 字體名稱
* @param fontStyle 字體樣式
* @param color 字體顏色
* @param fontSize 字體大小
* @param x 修正值
* @param y 修正值
* @param alpha 透明度
*/
public final static void pressText
String fontName
int y
try {
File img = new File(srcImageFile);
Image src = ImageIO
int width = src
int height = src
BufferedImage image = new BufferedImage(width
BufferedImage
Graphics
g
g
g
g
alpha));
// 在指定坐標繪制水印文字
g
/
g
ImageIO
} catch (Exception e) {
e
}
}
/**
* 給圖片添加圖片水印
* @param pressImg 水印圖片
* @param srcImageFile 源圖像地址
* @param destImageFile 目標圖像地址
* @param x 修正值
* @param y 修正值
* @param alpha 透明度
*/
public final static void pressImage(String pressImg
int x
try {
File img = new File(srcImageFile);
Image src = ImageIO
int wideth = src
int height = src
BufferedImage image = new BufferedImage(wideth
BufferedImage
Graphics
g
// 水印文件
Image src_biao = ImageIO
int wideth_biao = src_biao
int height_biao = src_biao
g
alpha));
g
(height
// 水印文件結束
g
ImageIO
} catch (Exception e) {
e
}
}
/**
* 計算text的長度(一個中文算兩個字符)
* @param text
* @return
*/
public final static int getLength(String text) {
int length =
for (int i =
if (new String(text
length +=
} else {
length +=
}
}
return length /
}
}
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19949.html