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因此上述的方法不作測試,先記錄下來