A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© shihao 中级黑马   /  2016-1-24 10:42  /  1304 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.ysh.util;

  2. import java.awt.Image;
  3. import java.awt.image.BufferedImage;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;

  7. import com.sun.image.codec.jpeg.JPEGCodec;
  8. import com.sun.image.codec.jpeg.JPEGImageEncoder;

  9. /**
  10. * 制作图片缩略图
  11. *
  12. * @author ysh
  13. *
  14. */
  15. public class PicUtils {
  16.         private String srcFile;
  17.         private String destFile;
  18.         private int width;
  19.         private int height;
  20.         private Image img;

  21.         /**
  22.          * 构造函数
  23.          *
  24.          * @param fileName
  25.          *            String
  26.          * @throws IOException
  27.          */
  28.         public PicUtils(String fileName) throws IOException {
  29.                 File _file = new File(fileName); // 读入文件
  30.                 this.srcFile = fileName;
  31.                 // 查找最后一个.
  32.                 int index = this.srcFile.lastIndexOf(".");
  33.                 String ext = this.srcFile.substring(index);
  34.                 this.destFile = this.srcFile.substring(0, index) + "_s" + ext;
  35.                 img = javax.imageio.ImageIO.read(_file); // 构造Image对象
  36.                 width = img.getWidth(null); // 得到源图宽
  37.                 height = img.getHeight(null); // 得到源图长
  38.         }

  39.         /**
  40.          * 强制压缩/放大图片到固定的大小
  41.          *
  42.          * @param w
  43.          *            int 新宽度
  44.          * @param h
  45.          *            int 新高度
  46.          * @throws IOException
  47.          */
  48.         public void resize(int w, int h) throws IOException {
  49.                 BufferedImage _image = new BufferedImage(w, h,
  50.                                 BufferedImage.TYPE_INT_RGB);
  51.                 _image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图
  52.                 FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流
  53.                 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  54.                 encoder.encode(_image); // 近JPEG编码
  55.                 out.close();
  56.         }

  57.         /**
  58.          * 按照固定的比例缩放图片
  59.          *
  60.          * @param t
  61.          *            double 比例
  62.          * @throws IOException
  63.          */
  64.         public void resize(double t) throws IOException {
  65.                 int w = (int) (width * t);
  66.                 int h = (int) (height * t);
  67.                 resize(w, h);
  68.         }

  69.         /**
  70.          * 以宽度为基准,等比例缩放图片
  71.          *
  72.          * @param w
  73.          *            int 新宽度
  74.          * @throws IOException
  75.          */
  76.         public void resizeByWidth(int w) throws IOException {
  77.                 int h = (int) (height * w / width);
  78.                 resize(w, h);
  79.         }

  80.         /**
  81.          * 以高度为基准,等比例缩放图片
  82.          *
  83.          * @param h
  84.          *            int 新高度
  85.          * @throws IOException
  86.          */
  87.         public void resizeByHeight(int h) throws IOException {
  88.                 int w = (int) (width * h / height);
  89.                 resize(w, h);
  90.         }

  91.         /**
  92.          * 按照最大高度限制,生成最大的等比例缩略图
  93.          *
  94.          * @param w
  95.          *            int 最大宽度
  96.          * @param h
  97.          *            int 最大高度
  98.          * @throws IOException
  99.          */
  100.         public void resizeFix(int w, int h) throws IOException {
  101.                 if (width / height > w / h) {
  102.                         resizeByWidth(w);
  103.                 } else {
  104.                         resizeByHeight(h);
  105.                 }
  106.         }

  107.         /**
  108.          * 设置目标文件名 setDestFile
  109.          *
  110.          * @param fileName
  111.          * String 文件名字符串
  112.          */
  113.         public void setDestFile(String fileName) throws Exception {
  114.                 if (!fileName.endsWith(".jpg")) {
  115.                         throw new Exception("Dest File Must end with \".jpg\".");
  116.                 }
  117.                 destFile = fileName;
  118.         }

  119.         /**
  120.          * 获取目标文件名 getDestFile
  121.          */
  122.         public String getDestFile() {
  123.                 return destFile;
  124.         }

  125.         /**
  126.          * 获取图片原始宽度 getSrcWidth
  127.          */
  128.         public int getSrcWidth() {
  129.                 return width;
  130.         }

  131.         /**
  132.          * 获取图片原始高度 getSrcHeight
  133.          */
  134.         public int getSrcHeight() {
  135.                 return height;
  136.         }
  137. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马