您的位置:首页 > 编程语言 > Java开发

制作图片缩略图 等比例压缩

2013-06-26 10:45 176 查看
package cn.itcast.estore.utils;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**

 * 制作图片缩略图

 *

 * @author seawind

 *

 */

public class PicUtils {

    private String srcFile;

    private String destFile;

    private int width;

    private int height;

    private Image img;

    public static void main(String[] args) throws IOException {

        PicUtils picUtils1 = new PicUtils(

                "WebRoot/upload/5/15/7e46c2f9-534c-4a8d-9e3b-4058f18c1429.jpg");

        PicUtils picUtils2 = new PicUtils(

                "WebRoot/upload/7/12/571a5dfb-237e-4539-840f-5c59be0c5d93.jpg");

        picUtils1.resize(100, 100);

        picUtils2.resize(100, 100);

    }

    /**

     * 构造函数

     *

     * @param fileName

     *            String

     * @throws IOException

     */

    public PicUtils(String fileName) throws IOException {

        File _file = new File(fileName); // 读入文件

        this.srcFile = fileName;

        // 查找最后一个.

        int index = this.srcFile.lastIndexOf(".");

        String ext = this.srcFile.substring(index);

        this.destFile = this.srcFile.substring(0, index) + "_s" + ext;

        img = javax.imageio.ImageIO.read(_file); // 构造Image对象

        width = img.getWidth(null); // 得到源图宽

        height = img.getHeight(null); // 得到源图长

    }

    /**

     * 强制压缩/放大图片到固定的大小

     *

     * @param w

     *            int 新宽度

     * @param h

     *            int 新高度

     * @throws IOException

     */

    public void resize(int w, int h) throws IOException {

        BufferedImage _image = new BufferedImage(w, h,

                BufferedImage.TYPE_INT_RGB);

        _image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图

        FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流

        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

        encoder.encode(_image); // 近JPEG编码

        out.close();

    }

    /**

     * 按照固定的比例缩放图片

     *

     * @param t

     *            double 比例

     * @throws IOException

     */

    public void resize(double t) throws IOException {

        int w = (int) (width * t);

        int h = (int) (height * t);

        resize(w, h);

    }

    /**

     * 以宽度为基准,等比例放缩图片

     *

     * @param w

     *            int 新宽度

     * @throws IOException

     */

    public void resizeByWidth(int w) throws IOException {

        int h = (int) (height * w / width);

        resize(w, h);

    }

    /**

     * 以高度为基准,等比例缩放图片

     *

     * @param h

     *            int 新高度

     * @throws IOException

     */

    public void resizeByHeight(int h) throws IOException {

        int w = (int) (width * h / height);

        resize(w, h);

    }

    /**

     * 按照最大高度限制,生成最大的等比例缩略图

     *

     * @param w

     *            int 最大宽度

     * @param h

     *            int 最大高度

     * @throws IOException

     */

    public void resizeFix(int w, int h) throws IOException {

        if (width / height > w / h) {

            resizeByWidth(w);

        } else {

            resizeByHeight(h);

        }

    }

    /**

     * 设置目标文件名 setDestFile

     *

     * @param fileName

     *            String 文件名字符串

     */

    public void setDestFile(String fileName) throws Exception {

        if (!fileName.endsWith(".jpg")) {

            throw new Exception("Dest File Must end with \".jpg\".");

        }

        destFile = fileName;

    }

    /**

     * 获取目标文件名 getDestFile

     */

    public String getDestFile() {

        return destFile;

    }

    /**

     * 获取图片原始宽度 getSrcWidth

     */

    public int getSrcWidth() {

        return width;

    }

    /**

     * 获取图片原始高度 getSrcHeight

     */

    public int getSrcHeight() {

        return height;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java