在网上找了两个图片的缩放类,在这里分享一下:
1 package manager.util; 2 import java.util.Calendar; 3 import java.io.File; 4 import java.awt.image.BufferedImage; 5 import java.awt.Image; 6 import java.awt.image.AffineTransformOp; 7 import javax.imageio.ImageIO; 8 import java.awt.geom.AffineTransform; 9 public class UploadImg { 10 String fromFileStr; 11 String saveToFileStr; 12 String sysimgfile; 13 int width; 14 int height; 15 String suffix; 16 /** 17 * @param fromFileStr 18 * 原始图片完整路径 19 * @param saveToFileStr 20 * 缩略图片保存路径 21 * @param sysimgfilenNow 22 * 处理后的图片文件名前缀 23 * 24 */ 25 public UploadImg(String fromFileStr, String saveToFileStr, String sysimgfile,String suffix,int width,int height) { 26 this.fromFileStr = fromFileStr; 27 this.saveToFileStr = saveToFileStr; 28 this.sysimgfile = sysimgfile; 29 this.width=width; 30 this.height=height; 31 this.suffix=suffix; 32 } 33 public boolean createThumbnail() throws Exception { 34 // fileExtNmae是图片的格式 gif JPG 或png 35 // String fileExtNmae=""; 36 double Ratio = 0.0; 37 File F = new File(fromFileStr); 38 if (!F.isFile()) 39 throw new Exception(F 40 + " is not image file error in CreateThumbnail!"); 41 File ThF = new File(saveToFileStr, sysimgfile +"."+suffix); 42 BufferedImage Bi = ImageIO.read(F); 43 Image Itemp = Bi.getScaledInstance(width, height, Bi.SCALE_SMOOTH); 44 if ((Bi.getHeight() > width) || (Bi.getWidth() > height)) { 45 if (Bi.getHeight() > Bi.getWidth()) 46 Ratio = (double)width / Bi.getHeight(); 47 else 48 Ratio = (double)height / Bi.getWidth(); 49 } 50 AffineTransformOp op = new AffineTransformOp(AffineTransform 51 .getScaleInstance(Ratio, Ratio), null); 52 Itemp = op.filter(Bi, null); 53 try { 54 ImageIO.write((BufferedImage) Itemp, suffix, ThF); 55 } catch (Exception ex) { 56 throw new Exception(" ImageIo.write error in CreatThum.: " 57 + ex.getMessage()); 58 } 59 return (true); 60 } 61 public static void main(String[] args) { 62 UploadImg UI; 63 boolean ss = false; 64 try { 65 UI = new UploadImg("d://FairyTaleVector040.png", "d://temp", "ps_low1","png",650,650); 66 ss = UI.createThumbnail(); 67 if (ss) { 68 System.out.println("Success"); 69 } else { 70 System.out.println("Error"); 71 } 72 } catch (Exception e) { 73 System.out.print(e.toString()); 74 } 75 } 76 }
这个类,可以对jpg、png、gif三种图片缩放,缩放按等比例缩放
1 package manager.util; 2 import java.awt.Graphics2D; 3 import java.awt.RenderingHints; 4 import java.awt.geom.AffineTransform; 5 import java.awt.image.BufferedImage; 6 import java.awt.image.ColorModel; 7 import java.awt.image.WritableRaster; 8 import java.io.File; 9 import javax.imageio.ImageIO; 10 public class Thumbnail { 11 /** 12 * 生成缩略图 13 * fromFileStr:原图片路径 14 * saveToFileStr:缩略图路径 15 * 缩略图的宽 16 * height:缩略图的高 17 */ 18 public static void saveImageAsJpg(String fromFileStr, String saveToFileStr, 19 int width, int height,boolean equalProportion) throws Exception { 20 BufferedImage srcImage; 21 String imgType="JPEG"; 22 if(fromFileStr.toLowerCase().endsWith(".png")){ 23 imgType="PNG"; 24 } 25 File fromFile=new File(fromFileStr); 26 File saveFile=new File(saveToFileStr); 27 srcImage=ImageIO.read(fromFile); 28 if(width>0||height>0){ 29 srcImage=resize(srcImage,width,height,equalProportion); 30 } 31 ImageIO.write(srcImage,imgType,saveFile); 32 } 33 34 /** 35 * 将原图片的BufferedImage对象生成缩略图 36 * source:原图片的BufferedImage对象 37 * targetW:缩略图的宽 38 * targetH:缩略图的高 39 */ 40 public static BufferedImage resize(BufferedImage source,int targetW,int targetH,boolean equalProportion){ 41 int type=source.getType(); 42 BufferedImage target=null; 43 double sx=(double)targetW/source.getWidth(); 44 double sy=(double)targetH/source.getHeight(); 45 //这里想实现在targetW,targetH范围内实现等比例的缩放 46 //如果不需要等比例的缩放则下面的if else语句注释调即可 47 if(equalProportion){ 48 if(sx>sy){ 49 sx=sy; 50 targetW=(int)(sx*source.getWidth()); 51 }else{ 52 sy=sx; 53 targetH=(int)(sx*source.getHeight()); 54 } 55 } 56 if(type==BufferedImage.TYPE_CUSTOM){ 57 ColorModel cm=source.getColorModel(); 58 WritableRaster raster=cm.createCompatibleWritableRaster(targetW,targetH); 59 boolean alphaPremultiplied=cm.isAlphaPremultiplied(); 60 target=new BufferedImage(cm,raster,alphaPremultiplied,null); 61 }else{ 62 target=new BufferedImage(targetW,targetH,type); 63 Graphics2D g=target.createGraphics(); 64 g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY); 65 g.drawRenderedImage(source,AffineTransform.getScaleInstance(sx,sy)); 66 g.dispose(); 67 } 68 return target; 69 } 70 71 public static void main(String[] args){ 72 try{ 73 Thumbnail.saveImageAsJpg("D://FairyTaleVector040.png", "D://temp//test.png", 480, 480,true); 74 }catch(Exception e){ 75 e.printStackTrace(); 76 } 77 } 78 }
这个类只能对jpg图片缩放,但是提供了两种缩放方式:等比例和不等比例