java中图片无损压缩

网上看到很多列子有用thumbnailator的、数据流等方法,最后我用了vue的前端lrz.js的压缩库,因为项目刚好是微信公众号的,前端用的weui。
首先要引用

<script type="text/javascript" src="/lib/lrz.min.js"></script>
//一开始是 lrz(file,{width:640,fieldName:"file"}) 方法里面有参数的但是我发现会把我
//上传的1920*960像素的压缩成640*320的像素图片,所以我把里面的参数去掉了
function upload(file,id) {
        lrz(file,"").then(function (rst) {
            var xhr = new XMLHttpRequest();
            xhr.open('POST', 'http://'+host+'/system/upload');
            xhr.onload = function () {
                if (xhr.status === 200) {
                    if(id=='introduceLetter'){
                        app.bespeak.introduceLetterPath=xhr.responseText;
                    }else if(id=='entrustBook'){
                        app.bespeak.entrustBookPath=xhr.responseText;
                    }
                } else {
                }
            };
            xhr.onerror = function () {
            };

            xhr.upload.onprogress = function (e) {
            }

            // 添加参数
            rst.formData.append('size', rst.fileLen);
            rst.formData.append('base64', rst.base64);
            // 触发上传
            xhr.send(rst.formData);

            return rst;
        })
            .catch(function (err) {
                alert(err);
            })
            .always(function () {// 不管是成功失败,这里都会执行
                debugger
                $.hideLoading();
            });
    }
### 使用Java进行图片无损压缩 #### Luban 图片压缩库的应用 对于希望在Android平台上实现高质量图片压缩的开发者来说,Luban是一个值得考虑的选择。尽管Luban主要针对的是接近微信朋友圈级别的有损压缩效果优化[^1],但在某些配置下也可以用于追求较高保真度的情况。 然而需要注意的是,严格意义上的“无损”意味着图像不会有任何质量上的损失,在这一点上,Luban并非专门设计来满足绝对无损的要求;相反,它更侧重于保持视觉上的近似不变的同时显著降低文件体积。 为了真正意义上达成无损压缩的目的,建议探索其他专注于此特性的开源项目或API服务。 #### 推荐的无损压缩方法与库 ##### 采用PNG格式转换 一种简单有效的做法就是利用`javax.imageio.ImageIO`类将JPEG等格式转存为PNG格式。由于PNG本身是一种支持Alpha透明度且具备内置无损压缩能力的图形标准,因此这种转变可以在不牺牲画质的前提下有效缩减部分类型的源图尺寸: ```java import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; public class PngConverter { public static void convertToPng(String inputPath, String outputPath) throws Exception { BufferedImage image = ImageIO.read(new File(inputPath)); ImageIO.write(image, "png", new File(outputPath)); } } ``` 这种方法适用于那些原本就不是特别大但是想要保存最佳品质的小型图标或是网页素材。 ##### 利用第三方库——ImageMagick 另一个强大的选项是借助像ImageMagick这样的外部工具集。通过JMagick或者Im4Java这些桥梁组件,可以从Java应用程序内部调用ImageMagick的强大命令行指令来进行复杂的图像处理操作,其中包括多种高级别的无损压缩策略。 安装好相应的依赖之后,下面是一段简单的示例代码展示如何执行无损JPEG到WebP格式之间的转换(注意这里假设已经预先设置了环境变量指向ImageMagick路径): ```java import org.im4java.core.ConvertCmd; import org.im4java.core.IMOperation; import org.im4java.process.ProcessStarter; // 设置ProcessStarter以适应Windows/Linux差异 if (System.getProperty("os.name").toLowerCase().contains("win")) { ProcessStarter.setGlobalSearchPath("C:\\Program Files\\ImageMagick-7.0.8-Q16"); } ConvertCmd cmd = new ConvertCmd(); IMOperation op = new IMOperation(); op.addImage("input.jpg"); // 输入文件名 op.quality(100); // 设定最高质量等级 op.define("webp:lossless=true"); // 启动无损模式 op.addImage("output.webp");// 输出目标名称 cmd.run(op); ``` 上述例子中启用了WebP编解码器中的无损特性,这使得最终产物既拥有较小的数据量又不失原有的细节特征。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值