Java实现的图片高质量缩放类定义与用法示例
本文实例讲述了Java实现的图片高质量缩放类定义与用法。分享给大家供大家参考,具体如下:
找了很多都不理想,最后找个到老外写的,不得不承认老外写的确实牛B。
packagecom.test;
importcom.sun.image.codec.jpeg.JPEGImageEncoder;
importcom.sun.image.codec.jpeg.JPEGCodec;
importcom.sun.image.codec.jpeg.JPEGEncodeParam;
importjavax.swing.*;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.awt.*;
importjava.awt.image.BufferedImage;
importjava.awt.image.Kernel;
importjava.awt.image.ConvolveOp;
publicclassImageUtil{
publicstaticvoidresize(FileoriginalFile,FileresizedFile,
intnewWidth,floatquality)throwsIOException{
if(quality>1){
thrownewIllegalArgumentException(
"Qualityhastobebetween0and1");
}
ImageIconii=newImageIcon(originalFile.getCanonicalPath());
Imagei=ii.getImage();
ImageresizedImage=null;
intiWidth=i.getWidth(null);
intiHeight=i.getHeight(null);
if(iWidth>iHeight){
resizedImage=i.getScaledInstance(newWidth,(newWidth*iHeight)
/iWidth,Image.SCALE_SMOOTH);
}else{
resizedImage=i.getScaledInstance((newWidth*iWidth)/iHeight,
newWidth,Image.SCALE_SMOOTH);
}
//Thiscodeensuresthatallthepixelsintheimageareloaded.
Imagetemp=newImageIcon(resizedImage).getImage();
//Createthebufferedimage.
BufferedImagebufferedImage=newBufferedImage(temp.getWidth(null),
temp.getHeight(null),BufferedImage.TYPE_INT_RGB);
//Copyimagetobufferedimage.
Graphicsg=bufferedImage.createGraphics();
//Clearbackgroundandpainttheimage.
g.setColor(Color.white);
g.fillRect(0,0,temp.getWidth(null),temp.getHeight(null));
g.drawImage(temp,0,0,null);
g.dispose();
//Soften.
floatsoftenFactor=0.05f;
float[]softenArray={0,softenFactor,0,softenFactor,
1-(softenFactor*4),softenFactor,0,softenFactor,0};
Kernelkernel=newKernel(3,3,softenArray);
ConvolveOpcOp=newConvolveOp(kernel,ConvolveOp.EDGE_NO_OP,null);
bufferedImage=cOp.filter(bufferedImage,null);
//Writethejpegtoafile.
FileOutputStreamout=newFileOutputStream(resizedFile);
//EncodesimageasaJPEGdatastream
JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParamparam=encoder
.getDefaultJPEGEncodeParam(bufferedImage);
param.setQuality(quality,true);
encoder.setJPEGEncodeParam(param);
encoder.encode(bufferedImage);
}//Exampleusage
publicstaticvoidmain(String[]args)throwsIOException{
//FileoriginalImage=newFile("C:\\11.jpg");
//resize(originalImage,newFile("c:\\11-0.jpg"),150,0.7f);
//resize(originalImage,newFile("c:\\11-1.jpg"),150,1f);
FileoriginalImage=newFile("C:\\1207.gif");
resize(originalImage,newFile("c:\\1207-0.jpg"),150,0.7f);
resize(originalImage,newFile("c:\\1207-1.jpg"),150,1f);
}
}
更多java相关内容感兴趣的读者可查看本站专题:《Java图片操作技巧汇总》、《java日期与时间操作技巧汇总》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》及《Java数据结构与算法教程》。
希望本文所述对大家java程序设计有所帮助。
