2024 JAVA Tinypng压缩图片,超级简单!!!

2024 JAVA Tinypng压缩图片,超级简单!!!2024JAVATiny 压缩图片 超级简单 tiny 压缩

大家好,欢迎来到IT知识分享网。

一、打开官网,注册账号,获取秘钥(每个月500张免费)

1.打开官网,注册账号

TinyPNG – Compress WebP, PNG and JPEG images intelligently

2024 JAVA Tinypng压缩图片,超级简单!!!

2.登录后,点击账号名字,找到如图所示

2024 JAVA Tinypng压缩图片,超级简单!!!

3.找到API,就看到一串秘钥,后续工具类的API_KEY换成它 

2024 JAVA Tinypng压缩图片,超级简单!!!二、API手册

2024 JAVA Tinypng压缩图片,超级简单!!!

2024 JAVA Tinypng压缩图片,超级简单!!!

三、导入依赖,和配置文件

 <dependency> <groupId>com.tinify</groupId> <artifactId>tinify</artifactId> <version>RELEASE</version> </dependency> 

#oss oss.endpoint:oss-cn-自己的.com oss.accessKeyId:自己的 oss.accessKeySecret:自己的 oss.bucketName:自己的 spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB

四、上传oss工具类

 @Configuration public class AliOssUtil { @Value("${oss.endpoint}") private String endpoint; // accessKey @Value("${oss.accessKeyId}") private String accessKeyId; @Value("${oss.accessKeySecret}") private String accessKeySecret; // 空间 @Value("${oss.bucketName}") private String bucketName; private OSS ossClient; //Tinify的API密钥 private static String API_KEY = "自己的APIKEY"; / * 初始化 */ @PostConstruct public void init() { ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); } / * tiny压缩图片后上传到oss * * @param file * @return */ public String compressImage1(MultipartFile file) { try { // 设置Tinify的API密钥 Tinify.setKey(API_KEY); // 从MultipartFile创建Tinify的Source对象 Source source = Tinify.fromBuffer(file.getBytes()); // 压缩图片 source.toFile(file.getOriginalFilename()); // 返回压缩后的图片数据 byte[] bytes = Files.readAllBytes(Paths.get(file.getOriginalFilename())); // 上传到oss MultipartFile file1 = convertToMultipartFile(bytes, file.getOriginalFilename()); String url = uploadObject2OSS(file1); return url; } catch (Exception e) { e.printStackTrace(); return null; } } / * tiny自定义图片大小后上传到oss * * @param file * @return */ public String compressImage2(MultipartFile file) { try { // 设置Tinify的API密钥 Tinify.setKey(API_KEY); // 从MultipartFile创建Tinify的Source对象 Source source = Tinify.fromBuffer(file.getBytes()); // 自定义图片大小 Options options = new Options() .with("method", "fit") .with("width", 100) .with("height", 100); Source resized = source.resize(options); resized.toFile(file.getOriginalFilename()); // 返回压缩后的图片数据 byte[] bytes = Files.readAllBytes(Paths.get(file.getOriginalFilename())); // 上传到oss MultipartFile file1 = convertToMultipartFile(bytes, file.getOriginalFilename()); String url = uploadObject2OSS(file1); return url; } catch (Exception e) { e.printStackTrace(); return null; } } / * 向阿里云的OSS存储中存储文件 --file也可以用InputStream替代 * * @param file 上传文件 * @return String 唯一MD5数字签名 */ public String uploadObject2OSS(MultipartFile file) { String resultStr = null; try { // 创建上传Object的Metadata ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentLength(file.getInputStream().available()); metadata.setCacheControl("no-cache"); metadata.setHeader("Pragma", "no-cache"); metadata.setContentEncoding("utf-8"); metadata.setContentType(file.getContentType()); String fileName = file.getOriginalFilename(); String date = new DateTime().toString("yyyy/MM-dd"); String filePath = "自定义名字/" + date + "/" + RandomStringUtils.randomNumeric(6) + fileName; PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, filePath, file.getInputStream(), metadata); ossClient.putObject(putObjectRequest); // 关闭 resultStr = "https://" + bucketName + "." + endpoint + "/" + filePath; } catch (Exception e) { e.printStackTrace(); System.out.println("上传阿里云OSS服务器异常." + e.getMessage() + e); } return resultStr; } / * 二进制转为MultipartFile * * @param data * @param filename * @return */ public static MultipartFile convertToMultipartFile(byte[] data, String filename) { ByteArrayResource resource = new ByteArrayResource(data) { @Override public String getFilename() { return filename; } }; return new MultipartFile() { @Override public String getName() { return filename; } @Override public String getOriginalFilename() { return filename; } @Override public String getContentType() { return MediaType.APPLICATION_OCTET_STREAM_VALUE; } @Override public boolean isEmpty() { return data.length == 0; } @Override public long getSize() { return data.length; } @Override public byte[] getBytes() { return data; } @Override public InputStream getInputStream() { return new ByteArrayInputStream(data); } @Override public void transferTo(File dest) throws IOException, IllegalStateException { new FileOutputStream(dest).write(data); } }; } }

五、controller使用工具类

 import com.xiaoqiu.gate2.utils.AliOssUtil; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; / * 上传 */ @RestController @RequestMapping("/test/upload") public class UploadController { @Resource private AliOssUtil aliOssUtil; / * 上传图片 * * @param file * @return */ @PostMapping("/fileUpload") @ResponseBody public String upload(@RequestParam("file") MultipartFile file) { String url = aliOssUtil.compressImage(file); return url; } } 

六、调用接口测试,成功返回url

2024 JAVA Tinypng压缩图片,超级简单!!!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/109570.html

(0)
上一篇 2026-02-05 22:20
下一篇 2026-02-05 22:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信