zoukankan      html  css  js  c++  java
  • java,图片压缩,略缩图

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

     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图片缩放,但是提供了两种缩放方式:等比例和不等比例

     以上内容来自: http://blog.csdn.net/tianhandigeng1498/article/details/6053835
  • 相关阅读:
    VS2008 SP1 安装时异常处理
    Android和iOS自带的人脸检测API
    FAAST 0.08 动作列表
    C#日期格式化(转)
    希望看这篇文章的人,耐心的看完这个短片
    C#实现转换十六进制
    App Store生存法则:iOS开发者经验分享
    开始的关键不是什么时候开始 而是开始后的坚持
    Eclipse IDE
    最近需要看的网站
  • 原文地址:https://www.cnblogs.com/mjorcen/p/3578780.html
Copyright © 2011-2022 走看看