SSM到SpringBoot(校园商铺)8

SSM到SpringBoot(校园商铺)

Thumbnailator图片处理和封装

Thumbnailator是一个用来生成图像缩略图的 Java类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。

Thumbnailator的简介和使用范例

1、pom.xml中添加依赖

<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
		<dependency>
			<groupId>net.coobird</groupId>
			<artifactId>thumbnailator</artifactId>
			<version>0.4.8</version>
		</dependency>

2、在工具类ImageUtil中练习简单使用Thumbnailator

//图片处理的工具类
public class ImageUtil {

	//Thumbnailator的简单使用
	public static void main(String[] args) throws IOException {
		//classPath的绝对值路径
		String basePath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
		Thumbnails.of(new File("D:/Temp/headPortrait.jpg"))		//要处理的图片。
		.size(160, 160)		//处理后的图片像素
		.rotate(90)			//旋转角度
		//水印   1在原图的哪个区域  2水印图片位置 3清晰度
		.watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File(basePath + "waterMark.png")), 0.25f)
		.outputQuality(0.8f)		//输出图片质量
		.toFile("D:/Temp/headPortraitNew.jpg");
		System.out.println("添加水印成功!");
	}
	
}

运行main方法;
在这里插入图片描述

从上面我们对Thumbnailator的简单使用可以看到我们ImageUtil要用到输入图片路径和输出路径,也就是地址处理。所以我们要编写PathUtil工具类

3、PathUtil

方法一:根据操作系统提供相应的根目录

补充:

System.getPropertys()和System.getProperty()变量所有系统属性的方法。
在这里插入图片描述

方法二:图片存储的子路径

package com.hytxwz.o2o.util;

public class PathUtil {

	private static String seperator = System.getProperty("file.seperator");

	/*
	 * 根据不同的操作系统返回相应的根路径
	 */
	public static String getBasePath() {
		String basePath = "";
		// 获取操作系统的名称
		String os = System.getProperty("os.name");
		if (os.startsWith("win")) {
			// 操作系统是windows
			basePath = "D:/projectdev/image/";
		} else { // linux or mac
			basePath = "/home/hytxwz/image/";
		}
		// 不同系统的分隔符不同
		basePath = basePath.replace("/", seperator);
		return basePath;
	}

	// 店铺图片存储子路径
	public static String getShopImagePath() {
		return "/upload/item/shop" + seperator;
	}

}

4、ImageUtil的基础方法

用于处理的图片是用户传入的文件流,所以方法传入对象为Spring自带的文件处理对象CommonsmultipartFile.

补充:

MultipartFile类中两个方法区别:
1、
getName: 获取表单中文件组件的名字
getOriginalFilename : 获取上传文件的原名
2、
在这里插入图片描述

ImageUtil的基础方法:图片处理

//classPath的绝对值路径
	private static String basePath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
	//日期格式
	private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
	//随机数字
	private static final Random  r = new Random();
	
	/**
	 *  图片处理方法
	 * @param thumbnail		//传入图片对象是Spring自带的文件处理对象CommonsMultipartFile
	 * @param targetAddr	//目标存储文件夹
	 * @return
	 */
	public static String generateThumbnail(CommonsMultipartFile thumbnail, String targetAddr) {
		//处理后的图片名称
		String realFileName = getRandomFileName();
		//获取传入文件的后缀名
		String extension = getFileExtension(thumbnail);
		//target路径不存在的话创建
		makeDirPath(targetAddr);
		//相对路径
		String relativeAddr = targetAddr + realFileName + extension;
		//完整文件存储路径
		String dest = PathUtil.getBasePath() + relativeAddr;
		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 "图片处理完成!";
	}
	
	/**
	 * 创建目标路径所涉及到的全部目录
	 * @param 目标路径
	 */
	private static void makeDirPath(String targetAddr) {
		String realFilePath = PathUtil.getBasePath() + targetAddr;
		File dirPath = new File(realFilePath);
		if(!dirPath.exists()) {
			dirPath.mkdirs();
		}
	}

	/**
	 * 生成随机文件名    当前时间+五位随机数
	 * @return 生成的文件名
	 */
	private static String getRandomFileName() {
		Integer ranNum = r.nextInt(89999) + 10000;	//10000 - 99999
		String currentTime = simpleDateFormat.format(new Date());
		return currentTime + ranNum;
	}
	
	/**
	 * 返回传入文件原名
	 * @param cFile	//传入文件
	 * @return
	 */
	private static String getFileExtension(CommonsMultipartFile cFile) {
		String originalFileName = cFile.getOriginalFilename();
		return originalFileName.substring(originalFileName.lastIndexOf("."));
	}

ok!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值