package com.o2o.util; import net.coobird.thumbnailator.Thumbnails; import net.coobird.thumbnailator.geometry.Positions; import javax.imageio.ImageIO; import java.io.File; import java.io.IOException; import java.net.URLDecoder; public class ImageUtil { public static void main(String[] args) throws IOException { //水印图片绝对路径,方法是通过线程运行的,因此可以通过线程逆推到类加载器,从类加载器中获取到资源的路径 String basePath=Thread.currentThread().getContextClassLoader().getResource("").getPath(); System.out.println(basePath); //可以传入文件也可以传入图片, Thumbnails.of(new File("/home/image/background-tela.jpg")) //并指定输出图片的大小 .size(200,200) //水印图片 .watermark(Positions.BOTTOM_RIGHT, //0.25f:透明度 ImageIO.read(new File(basePath+"283315.jpg")),0.25f) //压缩比 .outputQuality(0.8f) //输出文件 .toFile("/home/image/background.jpg"); } }
最近在做javaweb项目,但是在测试上面的代码时出现了 Exception in thread "main" javax.imageio.IIOException: Can't read input file!
开始时看到这个异常时很是困惑,心想难道路径错了?但是我没有直接输入路径而是通过Thread.currentThread().getContextClassLoader().getResource("").getPath();直接获取的路径,按原理说不应该i出现错误,
于是开始在网上查找资料,找了半天最后在https://blog.csdn.net/pengzhisen123/article/details/89634647这篇博客中找到了灵感,这篇文章的作者是在路径中出现了空格这一特殊字符,因此出现了上述异常,
抱着尝试的态度打印出来了路径发现果然出现了中文乱码,知道原因后,解决方法自然而然的就有了
//解决乱码的方法
basePath= URLDecoder.decode(basePath,"utf-8");
在查找相关资料时,看到了另一种可能出现的情况:
windows下分隔符得用“ \ ”(basepath打印出来分隔符是" / "),但是然后就basepath = basepath.replace('\',File.separatorChar)
但是本人使用的是Linux因此上述的方法不作测试,先记录下来