[code="java"]
public static boolean cutImage(Image srcImage, MyRectangle rect, String destPath) {
int x = rect.x;
int y = rect.y;
int w = rect.width;
int h = rect.height;
if (h < 1 || w < 1) {
return true;
}
int [] pixels = ((BufferedImage)srcImage).getRGB(x, y, w, h, null, 0, w);
DataBuffer dataBuffer = new DataBufferInt(pixels, w*h);
WritableRaster raster = Raster.createPackedRaster (dataBuffer, w, h,w, new int [] { 0xFF0000, 0xFF00, 0xFF }, null );
DirectColorModel directColorModel = new DirectColorModel(24, 0xFF0000, 0xFF00, 0xFF);
BufferedImage image = new BufferedImage(directColorModel, raster, true , null );
try {
ImageWriter writer = null;
// float quality = CommonGlobalUtil.quality;
//这里将适量设置为1.0 一样会有失真
float quality = 1.0f;
String formatName = "JPEG";
if(rect.isIsCustomSet()){
quality = rect.getQuatity();
formatName = rect.getFormat();
}
Iterator iter = ImageIO.getImageWritersByFormatName(formatName);
if (iter.hasNext()) {
writer = (ImageWriter) iter.next();
}
if (writer == null) {
logger.error("writer=null");
return false;
}
IIOImage iioImage = new IIOImage(image, null, null);
ImageWriteParam param = writer.getDefaultWriteParam();
if(formatName.equalsIgnoreCase("JPEG")) {
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(quality);
}
File file = new File(destPath);
if (!file.getParentFile().exists()) {
boolean b = file.getParentFile().mkdirs();
}
ImageOutputStream outputStream = ImageIO.createImageOutputStream(file);
writer.setOutput(outputStream);
writer.write(null, iioImage, param);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
[/code]