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程序设计有所帮助。