当前位置: 代码迷 >> Web前端 >> 图片切割跟压缩
  详细解决方案

图片切割跟压缩

热度:620   发布时间:2012-08-07 14:54:48.0
图片切割和压缩
/**
* 图像切割(改) *
*
* @param srcImageFile
*            源图像地址
* @param dirImageFile
*            新图像地址
* @param x
*            目标切片起点x坐标
* @param y
*            目标切片起点y坐标
* @param destWidth
*            目标切片宽度
* @param destHeight
*            目标切片高度
*/
public static void abscut(String srcImageFile, String dirImageFile, int x,
int y, int destWidth, int destHeight) {
try {
Image img;
ImageFilter cropFilter;
// 读取源图像
BufferedImage bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getWidth(); // 源图宽度
int srcHeight = bi.getHeight(); // 源图高度
if (srcWidth >= destWidth && srcHeight >= destHeight) {
Image image = bi.getScaledInstance(srcWidth, srcHeight,
Image.SCALE_DEFAULT);
// 改进的想法:是否可用多线程加快切割速度
// 四个参数分别为图像起点坐标和宽高
// 即: CropImageFilter(int x,int y,int width,int height)
cropFilter = new CropImageFilter(x, y, destWidth, destHeight);
img = Toolkit.getDefaultToolkit().createImage(
new FilteredImageSource(image.getSource(), cropFilter));
BufferedImage tag = new BufferedImage(destWidth, destHeight,
BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(img, 0, 0, null); // 绘制缩小后的图
g.dispose();
// 输出为文件
ImageIO.write(tag, "JPG", new File(dirImageFile));
}
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 压缩图片方法
*
* @param oldFile
*            将要压缩的图片
* @param width
*            压缩宽
* @param height
*            压缩长
* @param quality
*            压缩清晰度 <b>建议为1.0</b>
* @param smallIcon
*            压缩图片后,添加的扩展名
* @return
* @throws java.io.IOException
*/
public static String proce(String oldFile, int width, int height,
float quality, String smallIcon) throws java.io.IOException {
if (oldFile == null) {
return null;
}
String newImage = null;
try {
File file = new File(oldFile);
if (!file.exists()) // 文件不存在时
return null;
/** 对服务器上的临时文件进行处理 */
Image srcFile = ImageIO.read(file);
// 为等比缩放计算输出的图片宽度及高度
double rate1 = ((double) srcFile.getWidth(null)) / (double) width
+ 0.1;
double rate2 = ((double) srcFile.getHeight(null)) / (double) height
+ 0.1;
double rate = rate1 > rate2 ? rate1 : rate2;
int new_w = (int) (((double) srcFile.getWidth(null)) / rate);
int new_h = (int) (((double) srcFile.getHeight(null)) / rate);
/** 宽,高设定 */
BufferedImage tag = new BufferedImage(new_w, new_h,
BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(srcFile, 0, 0, new_w, new_h, null);
String filePrex = oldFile.substring(0, oldFile.indexOf('.'));
/** 压缩后的文件名 */
// newImage =smallIcon + filePrex
// +oldFile.substring(filePrex.length());
newImage = filePrex + smallIcon
+ oldFile.substring(filePrex.length());
System.out.println(newImage);
// newImage = smallIcon;
/** 压缩之后临时存放位置 */
FileOutputStream out = new FileOutputStream(newImage);

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
/** 压缩质量 */
jep.setQuality(quality, true);
encoder.encode(tag, jep);

out.close();
srcFile.flush();

} catch (FileNotFoundException e) {
e.printStackTrace();
}
return newImage;
}
[size=xx-small][/size]
  相关解决方案