给图片添加logo,储存图片。
有些时候,对于前段展示图片来说,有必要给图片添加一个属于自己程序的logo,以免其他人盗用图片,这是一个很严肃的问题,今天来给大家说说怎么给图片添加logo。
知识量说明:本篇内容比较丰富,对于不熟悉这方面的来说,可以学到很多知识,我会对比较难以理解的内容加以详细说明
本文将从两个类来进行说明
1.ImageUtil类
主要用来给图片添加logo的类
2.PathUtil类
用来创建储存图片使用到的路径
储存说明:图片是储存在自己的电脑硬盘中,数据库只是储存的一个路径,需要用到时,从自己电脑中取出来。
项目前提:1.创建合适的数据库,字段名等的合理创建
2.常用依赖的导入
3.合理的实体类对象(本文使用的是商店作为讲例)
一.准备
1.首先,准备好自己需要印上logo的图片,我已这几张图片为例。
2.这是我用到的logo图片,我将这张图片储存到项目中
3.导入jar包(项目依赖)
这里我使用的是maven管理工具,只需要导入相应的项目依赖即可
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency>
二.ImageUtile类的编写
创建ImageUtil类
获取以下对象
/*String path:获取classPath的绝对路径 currentThread():获取当前线程 getContextClassLoader():获取当前类加载器 getResource:获取当前资源*/ private static final String paths=Thread.currentThread().getContextClassLoader().getResource("").getPath(); //设置时间格式 private static final SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmSS"); //随机数对象 private static final Random random=new Random(); private static final Logger logger = LoggerFactory.getLogger(ImageUtil.class);
然后编写generateThumbnail方法,此方法主要用来获取图片
其中logger对象主要用来储存日志信息,不需要者可以不写
参数说明
ImageHolder 是一个自己创建的类,里面包装了图片名字和图片
/** * 给图片添加logo 并创建文件夹储存图片 * @param targetAddr * @param thumbnail * @return */ public static String generateThumbnail(ImageHolder thumbnail, String targetAddr){ //生成随机文件名字 String realFileName=getRandomFileName(); //获取文件拓展名 String extension=getFileExtension(thumbnail.getImageName()); //创建目录 makeDirPath(targetAddr); //获取相对路径 String relativeAddr=targetAddr+realFileName+extension; logger.debug("current relativeAddr is:"+relativeAddr); //组成绝对路径 File dest=new File(PathUtil.getImgBasePath()+relativeAddr); logger.debug("current complete is:"+PathUtil.getImgBasePath()+relativeAddr); //创建缩略图 try { //去除路径中的%20 String path= URLDecoder.decode(paths,"utf-8"); logger.debug("Path is:"+path); Thumbnails.of(thumbnail.getImage()).size(200,200) .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File(path+"logo.jpg")),0.25f) .outputQuality(0.8f).toFile(dest); } catch (IOException e) { e.printStackTrace(); } return relativeAddr; }
其中自己创建的方法有
1.getRandomFileName
/** * 生成随机文件名字 * 为了保证每秒钟生成的文件名不一样 * 使用当前时间加上五位随机数来创建随机数 * @return */ public static String getRandomFileName() { //获取随机五位数 10000-99999 int randomNum=random.nextInt(89999)+10000; String nowTime= sDateFormat.format(new Date()); return nowTime+randomNum; }
2.getFileExtension获取文件后缀名
/** * 获取文件后缀名 * @param fileName * @return */ private static String getFileExtension(String fileName) { //截取.好后面的字符串 并返回 return fileName.substring(fileName.lastIndexOf(".")+1); }
3.makeDirPath:创建目标路径所涉及的目录
/** * 创建目标路径所涉及的目录 * @param targetAddr */ private static void makeDirPath(String targetAddr) { String parentPath=PathUtil.getImgBasePath()+targetAddr; File dirPath=new File(parentPath); if (!dirPath.exists()){ dirPath.mkdirs(); } }
接下来就是PathUtil类`
//获取当前系统的文件分隔符 private static String separator=System.getProperty("file.separator"); /** * 获取照片绝对的路径 即 根路径 * @return */ public static String getImgBasePath(){ //判断当前的系统 String os=System.getProperty("os.name"); String basePath=""; //根据系统选择储存位置 if(os.toLowerCase().startsWith("win")){ basePath="E:/o2opic/image"; }else { basePath="/home/image/"; } basePath=basePath.replace("/",separator); return basePath; } /** * 根据需求获取图片路径 * @return */ public static String getShopImagePath(Long shopId){ String imagePath="shop/shopImage"+shopId+"/"; return imagePath.replace("/",separator); }
然后编写适合自己的测试类来进行测试
我的代码块是这样的,没有编写测试类
先获取路径,再将图片和路径传到generateThumbnail中
private void addThumbnail(Product product, ImageHolder thumbnail) { String shopImagePath = PathUtil.getShopImagePath(product.getShop().getShopId()); String thumbnail1 = ImageUtil.generateThumbnail(thumbnail, shopImagePath); product.setImgAddr(thumbnail1); }
最后的结果就是这样子
- ASP.NET 上传图片添加文字、Logo水印
- PCB图片Logo添加工具
- Fragment中的Toolbar使用与处理,以及toobar在Java代码实现添加logo图片和文字
- Altium Designer 的PCB中添加图片或logo的方法
- JSP 标题栏添加logo图片
- 给图片添加水印效果图的函数(可以在图片上添加自己的版权和LOGO图片的水印)
- ASP.NET 上传图片添加文字、Logo水印
- 向图片任意位置添加logo
- PHP图片等比缩放,并添加Logo水印特定代码和盯
- JAVA给微信公众号二维码添加LOGO时总是生成灰度图片的原因及解决办法
- 给图片添加水印效果图的函数(可以在图片上添加自己的版权和LOGO图片的水印)
- 添加开机第一帧、第二帧logo图片
- 为图片添加logo
- 给图片添加水印效果图的函数(可以在图片上添加自己的版权和LOGO图片的水印) 【转载】
- 给图片添加字体或logo小图片(可设置透明度)
- 二维码中添加logo图片(提供下载)
- 网站添加logo图片
- js jquery 生成二维码 jquery.qrcode.js,并在中间添加logo图片
- 给图片添加水印效果图的函数(可以在图片上添加自己的版权和LOGO图片的水印)
- DotNet为图片添加水印(LOGO及文字)