JAVA图片压缩 您所在的位置:网站首页 newimage/wycross1a.gif JAVA图片压缩

JAVA图片压缩

2023-01-22 03:30| 来源: 网络整理| 查看: 265

问题

项目中原图片压缩方式为:

FileOutputStream newimage=new FileOutputStream(img_midname); //输出到文件流 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage); JPEGEncodeParam jep=JPEGCodec.getDefaultJPEGEncodeParam(tag); /* 压缩质量 */ jep.setQuality(per, true); encoder.encode(tag, jep);

使用maven进行打包时会报错(程序包com.sun.image.codec.jpeg不存在),如下:

报错 原因

     按照Sun的官方解释:类似的接口是Sun为实现JDK功能的私有API,非公开的。在JDK1.7之前的版本,利用sun自带的javac命令是可以编译有此引用的代码的。为了规范API使用,提供了公开的imageio类来代替JPEGCodec的功能,为了屏蔽开发人员继续使用私有API,在JDK1.7版本中用javac命令去编译代码会报类似的错误:com.sun.image.codec.jpeg.JPEGCodec does't exist,但是基于以前版本编译的代码在JDK1.7中还是可以运行的。在后续的JDK版本中肯能会彻底删除私有API。

     javac在编译代码时,会尝试从rt.jar中找寻对应的类文件,他会默认从对应的符号表文件ct.sym (同样在jre/lib/下)中查找该类是否存在,由于ct.sym中删除了部分rt.jar中的类,包括com.sun.image.codec.jpeg,因此导致编译报错。      在Eclipse中利用maven进行编译时可以编译通过而IDEA不可以,是因为Eclipse采用的javac插件是Eclipse自己的,对上述jar进行访问时没有限制,可以进行访问。但是利用jdk中javac进行编译时,是不能访问上述jar包的。

解决方案 1. 配置maven-compiler-plugin插件指定rt.jar文件 org.apache.maven.plugins maven-compiler-plugin 2.5 ${jdk.version} ${jdk.version} UTF-8 ${JAVA_HOME}/jre/lib/rt.jar${path.separator}${JAVA_HOME}/jre/lib/jce.jar

     当我们需要指定多个 jar 的时候,中间的分隔符,要使用maven内置变量 ${path.separator} 来指定。因为在windows下,这个分隔符应该是“分号”,而在Linux 下这个分隔符必须是“冒号”,无论我们写死哪一种都是不兼容的,所以maven为我们提供了这样的变量,可以自动根据操作系统来使用对应的分隔符。

2. 使用公开api-ImageIO替代(推荐) ImageIO.write(tag, suffix, new FileOutputStream(newFile));


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有