博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shop--6.店铺注册--Thumbnailator图片处理和封装Util
阅读量:4352 次
发布时间:2019-06-07

本文共 4094 字,大约阅读时间需要 13 分钟。

在找到依赖相关的版本,然后加到pom.xml中

net.coobird
thumbnailator
0.4.8

Thumbnailator是一个优秀的图片处理的开源Java类库,处理效果远比Java API的好,

从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片

使用方法参考

public static void main(String[] args) throws IOException {        String basePath = Thread.currentThread().getContextClassLoader().getResource("").getPath();        Thumbnails.of(new File("Users\\Administrator\\Documents\\freak.jpg")).//输入的        size(200, 200).watermark(Positions.BOTTOM_RIGHT,                ImageIO.read(new File(basePath + "/logo.png")),0.25f).outputQuality(0.8f).        toFile("Users\\Administrator\\Documents\\newfreak.jpg");//输出的

其中basePath是通过当前线程获取保存在classpath下的绝对路径

 

scale()是将图片按照指定大小缩放

watermark(arg1, arg2, arg3)是给图片添加水印 arg1是水印在当前图片中的位置,arg2是水印的路径,arg3是水印的透明度

outputQuality()是压缩比

toFile()是输出位置

 

PathUtil工具类

1.根据执行环境(windows或其他)获取图片的根路径

2.获取各个店铺下的图片的子路径

public class PathUtil {    //获取当前系统文件的分隔符    private static String seperator = System.getProperty("file.separator");    //返回项目图片的根路径    public static String getImgBasePath() {        //获取当前操作系统        String os = System.getProperty("os.name");        String basePath = "";        //若当前是windows操作系统        if(os.toLowerCase().startsWith("win")) {            basePath = "D:/projectdev/image/";        }else {            basePath = "/home/xu/image/";        }        basePath = basePath.replace("/", seperator);        return basePath;    }    //返回各个店铺下的图片的子路径    public static String getShopImagePath(long shopId) {        String imagePath = "upload/item/shop/" + shopId + "/";        return imagePath.replace("/", seperator);    }}

 

ImgUtil处理图片的工具类

public class ImageUtil {     //保存在classpath下的图片路径    private static String basePath = Thread.currentThread().getContextClassLoader().getResource("").getPath();     //时间格式与随机数,用来组成唯一的随机图片名    private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");    private static final Random random = new Random();     //处理用户传递过来的店铺图片和    //CommonsMultipartFile用户传递的文件流    //targetAddr用户保存图片的地址  所属文件夹的相对路径    public static String generateThumbnail(CommonsMultipartFile thumbnail, String targetAddr){        //获取随机的文件名        String realFileName = getRandomFileName();        //获取输入流的文件扩展名 jpg、png        String extensionName = getFileExtension(thumbnail);        //创建目录        makeDirPath(targetAddr);        //相对路径        String relativePath = targetAddr + realFileName + extensionName;        //新的文件 绝对路径        File newFile = new File(PathUtil.getImgBasePath() + relativePath);         try {            Thumbnails.of(thumbnail.getInputStream()).size(200, 200)                    .watermark(Positions.BOTTOM_LEFT, ImageIO.read(new File(basePath + "/2.png")), 0.25f)                    .outputQuality( 0.8f ).toFile(newFile);        } catch (IOException e) {            e.printStackTrace();        }        return relativePath;    }     /**     * 创建目标路径上所涉及到的路径,如D:\Java\picture\meidada     * 若其中的picture,meidada的文件夹不存在,则创建出来     * @param targetAddr     */    private static void makeDirPath(String targetAddr) {        //目标图片应该存储的绝对路径        String realFileParentPath = PathUtil.getImgBasePath() + targetAddr;        File dirPath = new File( realFileParentPath );        if(!dirPath.exists()){            //若文件夹不存在,则递归的创建出来            dirPath.mkdirs();        }    }      /**     * 获取输入流的文件扩展名     * @param thumbnail     * @return     */    private static String getFileExtension(CommonsMultipartFile thumbnail) {        //获取传入文件流的原始文件名        String originalFileName = thumbnail.getOriginalFilename();        return originalFileName.substring(originalFileName.lastIndexOf("."));    }      /**     * 生成随机文件名,当前年月日小时分钟秒+五位随机数     *     * @return     */    private static String getRandomFileName() {        //获取随机的五位数        int randomNum = random.nextInt(89999) + 10000;        String nowTimeStr = simpleDateFormat.format(new Date());         return nowTimeStr + randomNum;    } }

 

转载于:https://www.cnblogs.com/windbag7/p/9340307.html

你可能感兴趣的文章
C#&java重学笔记(函数)
查看>>
14软件G2班
查看>>
bzoj 1977 [BeiJing2010组队]次小生成树 Tree
查看>>
bzoj 2119 股市的预测——枚举长度的关键点+后缀数组
查看>>
maven:新建的maven工程需要添加一下插件
查看>>
关于iOS自定义控件:在view上实现事件和代理
查看>>
[扫描线]POJ2932 Coneology
查看>>
全局变量与全局静态变量的区别
查看>>
EMC队列 发件人为空 From Address: <>
查看>>
多路复用IO模型 IO multiplexing
查看>>
蒙蒙的Git
查看>>
js方法遇到就记录
查看>>
iReport采用JDBC的方式连接Oracle
查看>>
AOP中的相关概念
查看>>
监控系统信息模块psutil
查看>>
python tokenizer
查看>>
Android studio来开发移动App--SQA计划和系统测试规程
查看>>
【兼容性】IE不支持日期字符串转换为日期对象
查看>>
函数语言
查看>>
笔试编程---快手实习题目
查看>>