有人知道java生成缩略图的方法吗 thumbnailator有问题

 我来答
不落的太阳Sean
推荐于2016-08-21 · TA获得超过281个赞
知道小有建树答主
回答量:220
采纳率:0%
帮助的人:179万
展开全部

自己写了一个,看看能不能有

/**
 * 本类实现一个对JPG/JPEG图像文件进行缩放处理的方法:即给定一个JPG文件,可以生成一个该JPG文件的缩影图像文件(JPG格式)<br/>
 * 提供三种生成缩影图像的方法:<br/>
 * 1.设置缩影文件的宽度, 根据设置的宽度和源图像文件的大小来确定新缩影文件的长度来生成缩影图像<br/>
 * 2.设置缩影文件的长度, 根据设置的长度和源图像文件的大小来确定新缩影文件的宽度来生成缩影图像<br/>
 * 3.设置缩影文件相对于源图像文件的比例大小, 根据源图像文件的大小及设置的比例来确定新缩影文件的大小来生成缩影图像<br/>
 * 新生成的缩影图像可以比原图像大, 这时即是放大源图像<br/>
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 1.8
 * 
 */
public class ImageScalingTool {

    // 对象是否己经初始化
    private boolean isInitFlag = false;

    // 定义生目标图片的宽度和高度, 给其一个就可以了
    private int targetPicWidth = 0;
    private int targetPicHeight = 0;

    // 定义目标图片的相比原图片的比例
    private double picScale = 0;

    /**
     * 构造函数
     */
    public ImageScalingTool() {
        isInitFlag = false;
    }

    /**
     * 重置JPG图片缩放器
     */
    public void resetImageScaling() {
        picScale = 0;
        targetPicWidth = 0;
        targetPicHeight = 0;
        isInitFlag = false;
    }

    /**
     * 设置目标图片相对于源图片的缩放比例
     * 
     * @param scale
     * @throws JPEGException
     */
    public void setPicScale(double scale) throws Exception {
        if (scale <= 0) {
            throw new RuntimeException(" 缩放比例不能为0和负数!  ");
        }

        resetImageScaling();
        picScale = scale;
        isInitFlag = true;
    }

    /**
     * 设置目标图片的宽度
     * 
     * @param width
     * @throws JPEGException
     */
    public void setSmallWidth(int width) throws Exception {
        if (width <= 0) {
            throw new RuntimeException(" 缩影图片的宽度不能为 0 和负数!  ");
        }

        resetImageScaling();
        targetPicWidth = width;
        isInitFlag = true;
    }

    /**
     * 设置目标图片的高度
     * 
     * @param height
     * @throws JPEGException
     */
    public void setSmallHeight(int height) throws Exception {
        if (height <= 0) {
            throw new RuntimeException(" 缩影图片的高度不能为 0 和负数!  ");
        }

        resetImageScaling();
        targetPicHeight = height;
        isInitFlag = true;
    }

    /**
     * 开始缩放图片
     * 
     * @param srcPicFileName
     *            源图片的文件名
     * @param targetPicFileName
     *            生成目标图片的文件名
     * @throws JPEGException
     */
    public void transform(String srcPicFileName, String targetPicFileName) throws Exception {
        if (!isInitFlag) {
            throw new RuntimeException(" 对象参数没有初始化!  ");
        }
        if (srcPicFileName == null || targetPicFileName == null) {
            throw new RuntimeException(" 包含文件名的路径为空!  ");
        }
        if ((!srcPicFileName.toLowerCase().endsWith("jpg")) && (!srcPicFileName.toLowerCase().endsWith("jpeg"))) {
            throw new RuntimeException(" 只能处理 JPG/JPEG 文件!  ");
        }
        if ((!targetPicFileName.toLowerCase().endsWith("jpg")) && !targetPicFileName.toLowerCase().endsWith("jpeg")) {
            throw new RuntimeException(" 只能处理 JPG/JPEG 文件!  ");
        }

        // 新建源图片和生成图片的文件对象
        File fin = new File(srcPicFileName);
        File fout = new File(targetPicFileName);

        // 通过缓冲读入源图片文件
        BufferedImage sourceImage = null;
        try {
            // 读取文件生成BufferedImage
            sourceImage = ImageIO.read(fin);
        } catch (IOException ex) {
            throw new RuntimeException(" 读取源图像文件出错!  ");
        }
        // 源图片的宽度和高度
        int sourceWidth = sourceImage.getWidth();
        int sourceHeight = sourceImage.getHeight();

        // 设置目标图片的实际宽度和高度
        int targetWidth = 0;
        int targetHeight = 0;
        if (targetPicWidth != 0) {
            // 根据设定的宽度求出长度
            targetWidth = targetPicWidth;
            targetHeight = (targetWidth * sourceHeight) / sourceWidth;
        } else if (targetPicHeight != 0) {
            // 根据设定的长度求出宽度
            targetHeight = targetPicHeight;
            targetWidth = (targetHeight * sourceWidth) / sourceHeight;
        } else if (picScale != 0) {
            // 根据设置的缩放比例设置图像的长和宽
            targetWidth = (int) (sourceWidth * picScale);
            targetHeight = (int) (sourceHeight * picScale);
        } else {
            throw new RuntimeException(" 对象参数初始化不正确!  ");
        }

        System.out.println(" 源图片的分辨率:  " + sourceWidth + "×" + sourceHeight);
        System.out.println(" 目标图片的分辨率:  " + targetWidth + "×" + targetHeight);
        // 目标图像的缓冲对象
        BufferedImage targetImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_3BYTE_BGR);

        // 求得目标图片与源图片宽度, 高度的比例.
        double scaleWidth = (double) targetWidth / sourceWidth;
        double scaleHeight = (double) targetHeight / sourceHeight;

        // 构造图像变换对象
        AffineTransform transform = new AffineTransform();
        // 设置图像转换的比例
        transform.setToScale(scaleWidth, scaleHeight);

        // 构造图像转换操作对象
        AffineTransformOp ato = new AffineTransformOp(transform, null);
        // 实现转换, 将bSrc转换成bTarget
        ato.filter(sourceImage, targetImage);

        // 输出目标图片
        try {
            // 将目标图片的BufferedImage写到文件中去, jpeg为图片的格式
            ImageIO.write(targetImage, "jpeg", fout);
        } catch (IOException ex1) {
            throw new Exception(" 写入缩略图像文件出错!  ");
        }
    }
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式