Image-如何给图片加水印/得到操作系统路径(java实现)

首先在pom文件中引入jar包
 <!--图片处理-->
    <dependency>
      <groupId>net.coobird</groupId>
      <artifactId>thumbnailator</artifactId>
      <version>0.4.8</version>
    </dependency>
代码实现:
package com.util;

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

import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;

/**
 * @Created with IntelliJ IDEA
 * @Description:
 * @Package: com.util
 * @author: FLy-Fly-Zhang
 * @Date: 2020/2/6
 * @Time: 20:38
 */
public class ImageUtil {
    public static void main(String[] args) throws IOException {
        //当资源在classpath路径下,我们可以通过下面代码获取classpath路径
        String basePath=Thread.currentThread().getContextClassLoader().getResource("").getPath();
        Thumbnails.of(new File("C:/Users/lenovo/Desktop/1.png"))
                .size(200,200) //图片大小,长宽都是200像素
                .watermark(Positions.BOTTOM_LEFT,
                        ImageIO.read(new File(basePath+"/aa.png")),
                        0.25f) //打水印,第一个参数为水印位置,第二个为水印图片路径,第三个为水印透明度
                .outputQuality(0.8f) //图片分辨率为之前80%
                .toFile(basePath+"/bb.jpg"); //输出处理后图片路径+命名
    }
}

图片处理工具类:

package com.util;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * @Created with IntelliJ IDEA
 * @Description: 图片处理工具类
 * @Package: com.util
 * @author: FLy-Fly-Zhang
 * @Date: 2020/2/6
 * @Time: 20:38
 */
public class ImageUtil {
    private static String basePath=Thread.currentThread().getContextClassLoader().getResource("").getPath();
    private static final SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyyMMddHHmmss");
    private static final Random random=new Random();
    /**
     * 生成缩略图
     *
     * 此方法处理的是用户传过来的文件,也就是文件流,
     * 因此处理的就是spring自带的文件处理对象CommonsMultipartFile
     * @param thumbnail
     * @param targetAddr //图片存储路径
     * @return
     */
    public static String generateThumbnail(CommonsMultipartFile thumbnail,String targetAddr){
         String realFileName=getRandomFileName();//图片名
         String extension=getFileExtension(thumbnail);//格式后缀
         makeDirPath(targetAddr);//路径
         String relativeAddr=targetAddr+realFileName+extension; //相对路径
         File dest=new File(PathUtil.getImageBasePath()+realFileName);//根路径+相对路径=完全路径
        try {
            Thumbnails.of(thumbnail.getInputStream())
                    .size(200,200)
                    .watermark(Positions.BOTTOM_RIGHT,
                            ImageIO.read(new File(basePath+"/watermark.png")),0.25f)
                    .outputQuality(0.8f)
                    .toFile(dest);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return relativeAddr;
    }

    /**
     * 创建目标路径所涉及的路径,即home/work/xx.png
     * 那么 home,work这两个文件夹都得自动创建
     * @param targetAddr
     */
    private static void makeDirPath(String targetAddr) {
        String realFileParentPath=PathUtil.getImageBasePath()+targetAddr;
        File dirPath=new File(realFileParentPath);
        if(!dirPath.exists()){ //检查文件路径是否存在
            //mkdir只能在已经存在的目录下创建文件夹
            //mkdirs可以在不存在的目录中创建文件夹
            dirPath.mkdirs();
        }
    }

    /**
     * 生成随机文件名,当前日期+五位随机数
     * @return
     */
    private static String getRandomFileName() {
         int rannum=random.nextInt(89999)+10000;
         String nowTimeStr=simpleDateFormat.format(new Date());
         return nowTimeStr+rannum;
    }

    /**
     * 获取输入文件流的扩展名
     * @param cFile
     * @return
     */
    private static String getFileExtension(CommonsMultipartFile cFile){
         String originalFileName=cFile.getOriginalFilename();
         cFile.getName();
         return originalFileName.substring(originalFileName.lastIndexOf("."));
    }
}

常用项目中对于项目路径处理工具类:

package com.util;

/**
 * @Created with IntelliJ IDEA
 * @Description: 路径处理工具类
 * @Package: com.util
 * @author: FLy-Fly-Zhang
 * @Date: 2020/2/6
 * @Time: 21:20
 */
public class PathUtil {
    //获取当前操作系统文件分隔符
    private static String separator=System.getProperty("file.separator");

    /**
     * 返回项目图片的根路径
     *
     * 设置当前项目资源存储路径,防止放在项目路径下,
     * 因项目上下线而产生丢失
     * 正常项目有专门的图片服务器
     * @return
     */
    public static String getImageBasePath(){
        //得到当前操作系统属性名
        String os=System.getProperty("os.name");
        String basePath="";
        //windows系统
        if(os.toLowerCase().startsWith("win")){
            basePath="E:image/";
        }else{ //linux/mac系统
            basePath="/home/image/";
        }
        basePath=basePath.replace("/",separator);//替换为当前操作系统路径分隔符
        return basePath;
    }
}

发布了354 篇原创文章 · 获赞 280 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/Fly_Fly_Zhang/article/details/104202537
今日推荐