import java.io.*;
import java.util.Iterator;
import java.awt.*;
import java.awt.image.*;
import java.awt.Graphics;
import java.awt.color.ColorSpace;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
public class ImageCut {
/**
* 缩放图像
*
* @param srcImageFile
* 源图像文件地址
* @param result
* 缩放后的图像地址
* @param scale
* 缩放比例
* @param flag
* 缩放选择:true 放大; false 缩小;
*/
public static void scale(String srcImageFile, String result, int scale,
boolean flag) {
try {
BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
int width = src.getWidth(); // 得到源图宽
int height = src.getHeight(); // 得到源图长
if (flag) {
// 放大
width = width * scale;
height = height * scale;
} else {
// 缩小
width = width / scale;
height = height / scale;
}
//这就是原图片的缩放比例对象
Image image = src.getScaledInstance(width, height,
Image.SCALE_DEFAULT);
// 下面这个对象其实是一个空白的缓冲字符图象
BufferedImage tag = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
//绘制对象
Graphics g = tag.getGraphics();
g.drawImage(image, 0, 0, null); // 开始绘制缩小后的图
g.dispose();//最终形成了一个图像
ImageIO.write(tag, "JPEG", new File(result));// 再以输出到文件流的方式保存图像文件
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 切割图片
*
* @param x
* 截点横坐标 (从左开始计数)
* @param y
* 截点纵坐标 (从上开始计数)
* @param width
* 截取的宽度
* @param height
* 截取的长度
* @param oldpath
* 图片位置
* @param newpath
* 新生成的图片位置
*/
public static void cutImage(int x, int y, int width, int height, String oldpath,
String newpath) {
FileInputStream is = null;
ImageInputStream iis = null;
// 这个是获取图片扩展名的方法,比如:jpg。
String imgType = getFileType(oldpath);
try {
is = new FileInputStream(oldpath);
Iterator<ImageReader> it = ImageIO
.getImageReadersByFormatName(imgType);
ImageReader reader = it.next();
iis = ImageIO.createImageInputStream(is);
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
Point p = new Point();
p.setLocation(x, y);
Dimension d = new Dimension();
d.setSize(width, height);
Rectangle rect = new Rectangle(p, d);
param.setSourceRegion(rect);
BufferedImage bi = reader.read(0, param);
ImageIO.write(bi, imgType, new File(newpath));
is.close();
iis.close();
} catch (Exception e) {
}
}
/**
* 图像类型转换 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) {
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();
}
}
/**
* 获得图片类型(gif,jpg,png)
*
* @param path
* 图片完整路径
* @return 图片类型
*/
public static String getFileType(String path) {
String type = path.substring(path.lastIndexOf(".") + 1);
if (type.indexOf("?") != -1) {
type = type.substring(0, type.indexOf("?"));
}
if (type.indexOf("&") != -1) {
type = type.substring(0, type.indexOf("&"));
}
return type;
}
/**
* 获得图片类型(gif,jpg,png)
*
* @param path
* 图片完整路径
* @return 图片类型
*/
public static String getImageType(String str) {
String imgType;
if (str.indexOf("JFIF") >= 0) {
imgType = "jpg";
} else if (str.indexOf("NG") >= 0) {
imgType = "png";
} else if (str.indexOf("GIF") >= 0) {
imgType = "gif";
} else if (str.indexOf("BM") >= 0) {
imgType = "bmp";
} else {
imgType = "jpg";
}
return imgType;
}
/**
* @param args
*/
public static void main(String[] args) {
String src = "D:\\1-1.png";
//超过最大源图片的规格就是全部
cutImage(100, 10, 2000, 2000, src, "D:\\1-1-1-1.png");
// cut("e:/1.jpg", "e:/t/", 200, 150);
}
}