日期:2014-05-17  浏览次数:20737 次

【求助!!】java文件流裁剪出来的图片和预览裁剪的图片不一致!!
裁剪图片的工具类是在网上找的。最后传入相应参数后,裁剪的和预览的位置,宽高,等完全不一样。求大神怎么破
裁剪工具类如下:


import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

public class ImageCut {
/**
 * 图片切割
 * 
 * @param imagePath
 *            原图地址
 * @param x
 *            目标切片坐标 X轴起点
 * @param y
 *            目标切片坐标 Y轴起点
 * @param w
 *            目标切片 宽度
 * @param h
 *            目标切片 高度
 */
public static void cut(int x1, int y1, int width, int height,String sourcePath) {

FileInputStream is = null;

ImageInputStream iis = null;

try {

is = new FileInputStream(sourcePath.trim());

String fileSuffix = sourcePath.substring(sourcePath.trim()
.lastIndexOf(".")+1);

Iterator<ImageReader> it = ImageIO
.getImageReadersByFormatName(fileSuffix.trim());

ImageReader reader = it.next();
iis = ImageIO.createImageInputStream(is);
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
Rectangle rect = new Rectangle(x1, y1, width, height);
param.setSourceRegion(rect);
BufferedImage bi = reader.read(0, param);
ImageIO.write(bi,fileSuffix.trim(),new File("d:123.jpg"));
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
is = null;
}
if (iis != null) {
try {
iis.close();
} catch (IOException e) {
e.printStackTrace();
}
iis = null;
}
}
}
}

调用工具类代码如下:

//裁剪图片
ImageCut imageCut = new ImageCut();  
    imageCut.cut(x1, y1,x2, y2, realPath);

jsp页面预览图如下:

结果裁剪出来的图却是这个样子的。坐标点和图像大小都不一致。唯一一致的就是这个图片是201*208的(和我传的宽和高一致)

虽然有6个参数 但我反复调换过这6个参数裁剪出来的图片还是和预览的不一样。求大神怎么破
------解决方案--