package ii7090;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class PngTools {
/**
* 图像类型转换 GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)
*/
public static void convert(String source, String result) {
try {
File f = new File(source);
f.canRead();
f.canWrite();
BufferedImage src = ImageIO.read(f);
ImageIO.write(src, "JPG", new File(result));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 彩色转为黑白
*
* @param source
* @param result
*/
public static void gray(String source, String result) {
try {
BufferedImage src = ImageIO.read(new File(source));
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp op = new ColorConvertOp(cs, null);
src = op.filter(src, null);
ImageIO.write(src, "JPEG", new File(result));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 实现图像的切割
*
* @param srcImageFile
* @param standardWidth
* @param standardHeight
*/
public static void cut(String srcImageFile, int standardWidth,
int standardHeight) {
try {
Image img;
ImageFilter cropFilter;
System.out.println("cut image");
// 读取源图像
BufferedImage bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getWidth(); // 源图宽度
int srcHeight = bi.getHeight(); // 源图高度
Image image = bi.getScaledInstance(srcWidth, srcHeight,
Image.SCALE_DEFAULT);
int dx = 0;// 裁剪图像的x点位置
int dy = 0;// 裁剪图像的y点位置
cropFilter = new CropImageFilter(dx, dy, standardWidth,
standardHeight);//提取现有 Image 中的给定矩形区域,为包含刚提取区域的新图像提供源。
img = Toolkit.getDefaultToolkit().createImage(
new FilteredImageSource(image.getSource(), cropFilter));//使用FilteredImageSource为原图像的新过滤版本产生图像数据
BufferedImage tag = new BufferedImage(standardWidth,
standardHeight, BufferedImage.TYPE_INT_RGB); //创建width,height大小的一个图像缓冲区
Graphics g = tag.getGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
ImageIO.write(tag, "JPEG", new File(srcImageFile + "pp.jpg"));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 实现图像的缩放
*
* @param srcImageFile
* @param standardWidth
* @param standardHeight
*/
public static void scale(String srcImageFile, int standardWidth,
int standardHeight) {
try {
System.out.println("scale image");
BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
Image image = src.getScaledInstance(standardWidth, standardHeight,
Image.SCALE_DEFAULT); //根据width,height创建此图像的缩放版本,按指定的 width 和 height 呈现图像
BufferedImage tag = new BufferedImage(standardWidth,
standardHeight, BufferedImage.TYPE_INT_RGB); //创建width,height大小的一个图像缓冲区
Graphics g = tag.getGraphics();
g.drawImage(image, 0, 0, null); //将图像会知道缓冲区上
g.dispose();
ImageIO.write(tag, "JPG", new File(srcImageFile + "name.JPG"));// 输出到文件流
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
cut("d:/2012.jpg", 2000, 2000);
// scale("D:/2012.jpg", 200, 100);
}
}
参考:http://blog.youkuaiyun.com/boy_wh520/archive/2007/04/12/1561519.aspx
http://twobrushes.blog.163.com/blog/static/7891240420082824148850/