• Java图片缩放类


    http://blog.csdn.net/tianhandigeng1498/article/details/6053835

    在网上找了两个图片的缩放类,在这里分享一下:

     

    [java] view plaincopy
    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三种图片缩放,缩放按等比例缩放

     

     

     

    [java] view plaincopy
    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"480480,true);  
    74.         }catch(Exception e){  
    75.             e.printStackTrace();  
    76.         }  
    77.     }  
    78. }  

     

    这个类只能对jpg图片缩放,但是提供了两种缩放方式:等比例和不等比例

  • 相关阅读:
    C++ string 类的 find 方法实例详解
    linux系统中errno与error对照表
    tshark (wireshark)笔记
    自己签发免费ssl证书
    Go语言练习:网络编程实例——简易图片上传网站
    java开源工具包-Jodd框架
    数据库性能瓶颈解决方案
    [转载]如何快速学习一门技术
    [转载]IBM公司发布了最新的power7服务器p750 p770 p780
    计算机组成原理 — 指令系统
  • 原文地址:https://www.cnblogs.com/nafio/p/9137641.html
Copyright © 2020-2023  润新知