Thumbnails使用

本文介绍如何使用Thumbnails工具类在Java中处理图片,包括缩放、加水印和调整质量等操作。通过具体代码示例展示了如何将图片转换为指定大小,并在右下角添加透明度可调的水印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Thumbnails使用

在开发java是,使用Thumbnails工具类能帮助我们对图片进行很好的处理,Thumbnails对图片的操作进行了很好的封装。

使用步骤

  1. 导入jar包
  	<dependency>

      <groupId>net.coobird</groupId>

      <artifactId>thumbnailator</artifactId>

      <version>0.4.8</version>

    </dependency>

2.具体使用方法

ImageUtil 类

public class ImageUtil {
	private static String basePath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
	private static final SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
	private static final Random r = new Random();
	/**
	 * 
	
	 * @Description:PathUtil工具类用来获取两个目录
	 * 1.存放图片的基本目录
	 * 2.是商家存放图片的目录
	 */
	public static String generateThumbnail(File shopImg ,String targetAddr) {
		String realFileName = getRandomFileName();//获取随机文件名(时间+随机五位数),其中时间格式为yyyyMMddHHmmss(通过SimpleDateFormat定义)
		String extension = getFileExtension(shopImg);//获取扩展名
		makeDirPath(targetAddr);//创建涉及的目录
		String relativeAddr = targetAddr + realFileName + extension;//完整地址
		File dest = new File(relativeAddr);
		try {
			Thumbnails.of(shopImg)
				.size(200, 200).watermark(Positions.BOTTOM_RIGHT,ImageIO.read(new File(basePath + "watermark.jpg")),0.25f).outputQuality(0.8f)
					.toFile(dest);//注意这里获取的basePath是测试路径下的水印图片,即测试路径下同样需要存放水印图片
		} catch (Exception e) {
			e.printStackTrace();
		}
		return relativeAddr;
	}
//	创建目标路径所涉及的目录
	private static void makeDirPath(String targetAddr) {
		String realFileParentPath = targetAddr;
		File dirPath = new File(realFileParentPath);
//		判断其是否存在
		if(!dirPath.exists()) {
//			创建所有涉及的目录
			dirPath.mkdirs();
		}
	}
	//	获取文件扩展名
	private static String getFileExtension(File shopImg) {
//		String originalFilename = shopImg.getOriginalFilename();
		String originalFilename = shopImg.getName();
		return originalFilename.substring(originalFilename.lastIndexOf("."));
	}
	//	生成随机文件名
	private static String getRandomFileName() {
//		获取随机五位数
		String rannum = UUID.randomUUID().toString().substring(0, 5);
		String nowTimeStr = sDateFormat.format(new Date());
		return nowTimeStr+rannum;
	}
	public static void main(String[] args)  {
		System.out.println(basePath+"watermark.jpg");
		try {
			Thumbnails.of(new File("G:/WebZy/oto/src/main/resources/123.jpg"))
			.size(200, 200).watermark(Positions.BOTTOM_RIGHT,ImageIO.read(new File(basePath + "watermark.jpg")),0.25f).outputQuality(0.8f)
			.toFile("G:/WebZy/oto/src/main/resources/1234.jpg");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


PathUtil类


public class PathUtil {
	private static String seperator= System.getProperty("file.separator");
	public static String getImgBasePath() {
		String os = System.getProperty("os.name");
		String basePath = "";
		if(os.toLowerCase().startsWith("win")) {
			basePath = "E:/project/Image/";
		}else {
			basePath="home/xiangze/image/";
		}
		basePath = basePath.replace("/", seperator);
		return basePath;
	}
	
	public static String getShopImagePath(int shopId) {
		String imagePath = "E:/project/upload/item/shop/" + shopId + "/";
		return imagePath.replace("/", seperator);
	}
}

其它功能用到时查看官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值