需求:下载一张网络图,压缩成固定大小并上传到本地服务器
工具:Thumbnails
步骤:
1、引入Thumbnails依赖:
<!-- 图片缩略图 -->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
2、核心方法:
// InputStream fis
// File img
Thumbnails.of(fis).size(width,height).toFile(img);
3、demo:
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.junit.Test;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Main.class)
public class UtilTest{
@Test
public void uploadTest() throws IOException{
//网络图片地址
String srcUrl = "http://";
String savePath = "E:/";
String urlPath = "http://localhosr:11001/";
// 转url资源链接
URL url = new URL(srcUrl);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置超时间为3秒
conn.setConnectTimeout(3*1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//得到输入流
InputStream inputStream = conn.getInputStream();
String codeUrl = (new UploadUtil()).uploadScaleImg(inputStream, savePath, urlPath, 80, 80);
System.out.println(codeUrl);
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import net.coobird.thumbnailator.Thumbnails;
public class UploadUtil {
/**
* 上传压缩图片文件
* @param fis 图片输入流
* @param savePath 存放路径
* @param urlPath 访问路径
* @param width 压缩文件宽
* @param height 压缩文件高
* @author zhangyan
* @date 2020年3月30日13:27:02
*/
public String uploadScaleImg(InputStream fis, String savePath, String urlPath, int width, int height) throws IOException {
// 图片文件命名
StringBuffer tempFileName = new StringBuffer("qrCode");
tempFileName.append("-");
tempFileName.append(FMT.format(new Date()));
tempFileName.append(UUID.randomUUID().toString().replace("-", "").substring(16));
tempFileName.append(".png");
// 指定路径创建目录
File tempPackage = new File(savePath);
if (!tempPackage.exists()) {
tempPackage.mkdirs();
}
// 创建图像文件
File img = new File(savePath + File.separator + tempFileName);
// 指定宽高压缩文件
Thumbnails.of(fis).size(width,height).toFile(img);
// 返回访问路径
String serverSavePath = urlPath + "/" + tempFileName.toString();
return serverSavePath;
}
}
Thumbnails还支持按比例压缩、旋转、加水印、输出到OutputStream等。