使用thumbnailator操作图片

maven坐标:

    <dependency>
        <groupId>net.coobird</groupId>
        <artifactId>thumbnailator</artifactId>
        <version>0.4.8</version>
    </dependency>

相关代码:

package own.Java;

import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

public class ThumbTest {

    /**
     * 指定尺寸缩放图片(遵循比例)
     * @param fromPic 原图片
     * @param toPic   新图片
     * @param width   新图片宽度
     * @param height  新图片高度
     * @throws IOException
     * 特点:会按照入参中的宽度和高度较小的值进行等比例缩放
     */
    public static void overRidePicSize(File fromPic,File toPic,int width,int height) throws IOException {
        Thumbnails.of(fromPic).size(width, height).toFile(toPic);
    }

    /**
     * 按比例缩小图片
     * @param fromPic 原图片
     * @param toPic 新图片
     * @param size 缩小放大比例
     * @throws IOException
     */
    public static void overRidePicSize2(File fromPic,File toPic,double size) throws IOException {
        Thumbnails.of(fromPic).scale(size).toFile(toPic);
    }

    /**
     * 指定宽高非等比缩放
     * @param fromPic       源文件
     * @param toPic         指定存储文件
     * @param width         文件尺寸
     * @param height        文件尺寸
     * @throws IOException
     */
    public static void overRidePicSize3(File fromPic,File toPic,int width,int height) throws IOException {
        Thumbnails.of(fromPic).size(width,height).keepAspectRatio(false).toFile(toPic);
    }

    /**
     * 旋转图片
     * @param fromPic       源文件
     * @param toPic         存储文件
     * @param width         指定存储文件尺寸
     * @param height        指定存储文件尺寸
     * @param rotate        指定旋转角度
     * @throws IOException
     */
    public static void rotatePic(File fromPic,File toPic,int width,int height,int rotate) throws IOException {
        Thumbnails.of(fromPic).size(width, height).rotate(rotate).toFile(toPic);
    }

    /**
     * 图片尺寸不变,压缩图片文件大小
     * @param fromPic       源文件
     * @param toPic         指定存储文件
     * @param size          指定文件尺寸缩放比例
     * @param qualitySize   指定文件占用磁盘空间大小缩放比例
     * @throws IOException
     */
    public static void picByteToSmall(File fromPic,File toPic,float size,double qualitySize) throws IOException {
        Thumbnails.of(fromPic).scale(size).outputQuality(qualitySize).toFile(toPic);
    }

    /**
     * 给图片添加水印
     * @param fromPic       源文件
     * @param toPic         指定存储文件
     * @param waterPic      水印文件
     * @param left          指定图片尺寸
     * @param top           指定图片尺寸
     * @param size          指定图片缩放比例
     * @param qualitySize   指定文件大小缩放比例
     * @throws IOException
     */
    public static void waterMark(File fromPic,File toPic,File waterPic,int left,int top,float size,double qualitySize) throws IOException {
        Thumbnails.of(fromPic)
            .size(left, top)
            .watermark(Positions.CENTER,ImageIO.read(waterPic),size)
            .outputQuality(qualitySize)
            .toFile(toPic);
    }

    /**
     * 图片裁剪(中间位置)
     * @param fromPic       源文件
     * @param toPic         指定存储文件
     * @param left          裁剪位置
     * @param top           裁剪位置
     * @param width         生成文件尺寸
     * @param height        生成文件尺寸
     * @throws IOException
     */
    public static void picCutCenter(File fromPic,File toPic,int cutWidth,int cutHeight,int width,int height) throws IOException {
        Thumbnails.of(fromPic).sourceRegion(Positions.CENTER, cutWidth, cutHeight)
            .size(width, height)
            .toFile(toPic);
    }

    /**
     * 图片裁剪(中上区域)
     * @param fromPic   源文件
     * @param toPic     指定生成文件
     * @param left      裁剪位置
     * @param top       裁剪位置
     * @param width     生成文件尺寸
     * @param height    生成文件尺寸
     * @throws IOException
     */
    public static void picCutTopCenter(File fromPic,File toPic,int cutWidth,int cutHeight,int width,int height) throws IOException {
        Thumbnails.of(fromPic).sourceRegion(Positions.TOP_CENTER,cutWidth,cutHeight)
            .size(width, height)
            .toFile(toPic);
    }

    /**
     * 默认裁剪方法
     * @param fromPic   源文件
     * @param toPic     指定接收文件
     * @param left      裁剪位置左
     * @param top       裁剪位置
     * @param cutWidth  裁剪尺寸
     * @param cutHeight 裁剪尺寸
     * @param width     指定生成文件的尺寸
     * @param height    指定生成文件的尺寸
     * @throws IOException
     */
    public static void picCutDefault(
                    File fromPic,File toPic,int left,int top,int cutWidth,
                    int cutHeight,int width,int height) throws IOException {
        Thumbnails.of(fromPic).sourceRegion(left,top,cutWidth,cutHeight)
            .size(width, height)
            .toFile(toPic);
    }

    /**
     * 图片转换格式
     * @param fromPic       源文件
     * @param toPic         存储文件
     * @param size          指定尺寸
     * @param msg           转换文件格式后缀
     * @param picName       文件名称
     * @throws IOException
     */
    public static void picFormat(File fromPic,float size,String msg,String picName) throws IOException {
        Thumbnails.of(fromPic).scale(1f).outputFormat(msg).toFile(picName+"."+msg);
    }

    public static void main(String[] args) throws IOException {
        File fromPic = new File("D:\\EclipseIndigo\\Java\\src\\main\\java\\own\\Java\\test.jpg");
        File toPic = new File("D:\\EclipseIndigo\\Java\\src\\main\\java\\own\\Java\\结果.jpg");
        File waterPic = new File("D:\\EclipseIndigo\\Java\\src\\main\\java\\own\\Java\\fu.jpg");

        //overRidePicSize(fromPic, toPic, 1300,900);
        //overRidePicSize2(fromPic, toPic, 0.9);
        //overRidePicSize3(fromPic, toPic, 900,600);
        //rotatePic(fromPic, toPic, 900,600,90);
        //picByteToSmall(fromPic,toPic,1f,0.25);
        waterMark(fromPic,toPic,waterPic,600,600,0.25f,1.00);
        //picCutTopCenter(fromPic,toPic,200,200,800,800);
        //picCutDefault(fromPic, toPic, 220, 220, 200, 200, 500, 500);
        //picFormat(fromPic,1f,"png","geshi");
    }
}

猜你喜欢

转载自blog.csdn.net/fangdengfu123/article/details/78179876