彻底解决免费avif图片转换jpg

需求背景

最近在捣鼓一些图片,发现avif的图片,本地可以查看,但是上传到网站上提示不支持的格式。于是需要将avif图片转换为jpg的图片。网上好多都是收费的,这里说一下免费的教程。

操作教程

以下的操作教程为win11,win10也大同小异。

1、准备avif图片

# 下面这个网络图片是avif格式的,大家打开图片
# 在图片上右击-图片另存为
# 即可保存这个图片到本地

https://s.alicdn.com/@sc04/kf/H09816392b3b84640a984e2986458d573g.jpg

2、 打开软件

使用画图或者照片工具打开软件,推荐选择画图,点击一次即可完成。照片工具需要点击两次

使用画图或者照片工具打开软件,推荐选择画图,点击一次即可完成。照片工具需要点击两次

使用画图或者照片工具打开软件,推荐选择画图,点击一次即可完成。照片工具需要点击两次

 

### Java 中实现 AVIF 图片格式转换 在 Java 中进行 AVIF 图片格式转换可以通过调用外部工具(如 FFmpeg)或者借助第三方库来完成。以下是两种主要方式: #### 方法一:通过 FFmpeg 进行 AVIF 转换 FFmpeg 提供了强大的多媒体处理能力,支持多种视频和图像格式之间的转换。可以在 Java 应用程序中通过运行命令行的方式调用 FFmpeg。 ##### 使用 ProcessBuilder 执行 FFmpeg 命令 下面是一个基于 `ProcessBuilder` 的示例代码,用于将 PNG 文件转换AVIF 格式文件[^1]: ```java import java.io.BufferedReader; import java.io.InputStreamReader; public class AvifConverter { public static void main(String[] args) { try { String inputPath = "input.png"; String outputPath = "output.avif"; // 构建 FFmpeg 命令 ProcessBuilder processBuilder = new ProcessBuilder( "ffmpeg", "-i", inputPath, "-c:v", "libaom-av1", "-cpu-used", "4", outputPath); // 启动进程并等待其结束 Process process = processBuilder.start(); int exitCode = process.waitFor(); // 输出执行结果 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } if (exitCode == 0) { System.out.println("AVIF 转换成功!"); } else { System.err.println("AVIF 转换失败,退出码:" + exitCode); } } catch (Exception e) { e.printStackTrace(); } } } ``` 此代码片段展示了如何利用 FFmpeg 将输入的 PNG 文件转换成 AVIF 格式的输出文件。 --- #### 方法二:使用第三方 Java 库 如果不想依赖于外部工具,可以选择一些专门针对图像处理的 Java 库。然而需要注意的是,目前原生支持 AVIF 编解码功能的纯 Java 库较少。一种可能的选择是结合 JNI 或者其他绑定技术引入 C/C++ 实现的支持。 ##### 示例:使用 JCodec 和 AOM-Lib 绑定 JCodec 是一个开源项目,提供了部分现代编解码器的功能接口。虽然它本身不完全支持 AVIF,但可以尝试扩展以适配特定需求。以下伪代码展示了一个潜在方向: ```java // TODO: 需要实际开发团队补充具体细节 // 参考 https://github.com/jcodec/jcodec 并集成 libaom 功能模块 ``` 由于该路径较为复杂且涉及底层操作,建议优先考虑方法一中的解决方案。 --- #### 性能优化技巧 对于大规模批量处理任务,可采用内存映射文件技术提升效率。例如,在读取大尺寸图片时,可通过 FileChannel 获取 MappedByteBuffer 来减少 I/O 开销[^3]。 ```java import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; public class MemoryMappedExample { public static void mapFile() throws Exception { try (FileChannel fileChannel = FileChannel.open(Paths.get("large_image.png"), StandardOpenOption.READ)) { long size = fileChannel.size(); // 获取文件大小 MappedByteBuffer buffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, size); // 映射到内存 // 对缓冲区的操作逻辑... } } } ``` 上述代码演示了如何高效加载大型图片资源以便进一步加工。 --- #### 关键概念总结 - **无损压缩**:PNG 属于典型的无损压缩格式,能够保持原始质量而不损失任何像素信息[^2]。 - **AVIF 特性**:作为一种新兴标准,AVIF 结合了高效的有损/无损压缩机制以及更优的颜色空间表现力,适合替代传统静态图标的场景应用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

renkai721

谢谢您的打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值