我是靠谱客的博主 沉默小猫咪,这篇文章主要介绍maven编译提示:程序包com.sun.image.codec.jpeg不存在,替换为ImageIO解决办法,现在分享给大家,希望可以做个参考。

前几天,遇见一个很头疼的问题,我解决了一下午现在和大家分享一下,再写一段图片压缩的代码使用了com.sun.image.codec.jpeg这个类,本地跑项目没有问题,但是jenkins构建的时候提示的程序包com.sun.image.codec.jpeg不存在,去各种百度才发现编译失败原因是:

JDK7的时候,com.sun.image.codec.jpeg类已经退休了,以后凡是带sun.*的类库将不会被支持。javac在编译代码时,当他尝试从rt.jar中找寻对应的类文件时,他会默认从对应的符号表文件ct.sym
(同样在jre/lib/下)中查找该类是否存在,由于ct.sym中有意或无意的遗失了部分rt.jar中的类,包括com.sun.image.codec.jpeg,因此导致编译报错。

解析失败原因我参考的:https://blog.csdn.net/eleanoryss/article/details/80015293,但是使用了之后确实编译通过的,因为我看他的解决办法就是不编译这个包所以可以通过,但是到了服务器上测试的时候,发现直接报错找不到这个类。
在这里插入图片描述
解决方法:既然这个包不可以用编译不通过,那就只好换一种写法来尝试一下了,下面我把更换的方法代码贴在下面:

复制代码
1
2
3
4
5
6
7
8
FileOutputStream out = new FileOutputStream(imgdist); // JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); // encoder.encode(tag); // out.close(); float per = (float) 0.85; saveAsJPEG(100, tag, per, out);

这里注释掉的是我之前使用的com.sun.image.codec.jpeg这个包下面的方法才导致编译不通过的,现在换一种思路使用ImageIO下面的包来解决:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/** * 以JPEG编码保存图片 * * @param dpi 分辨率 * @param image_to_save 要处理的图像图片 * @param JPEGcompression 压缩比 * @param fos 文件输出流 * @throws IOException */ public static void saveAsJPEG(Integer dpi, BufferedImage image_to_save, float JPEGcompression, FileOutputStream fos) throws IOException { // Image writer ImageWriter imageWriter = ImageIO.getImageWritersBySuffix("jpg").next(); ImageOutputStream ios = ImageIO.createImageOutputStream(fos); imageWriter.setOutput(ios); //and metadata IIOMetadata imageMetaData = imageWriter.getDefaultImageMetadata(new ImageTypeSpecifier(image_to_save), null); if (dpi != null && !dpi.equals("")) { //new metadata Element tree = (Element) imageMetaData.getAsTree("javax_imageio_jpeg_image_1.0"); Element jfif = (Element) tree.getElementsByTagName("app0JFIF").item(0); jfif.setAttribute("Xdensity", Integer.toString(dpi)); jfif.setAttribute("Ydensity", Integer.toString(dpi)); } if (JPEGcompression >= 0 && JPEGcompression <= 1f) { // new Compression JPEGImageWriteParam jpegParams = (JPEGImageWriteParam) imageWriter.getDefaultWriteParam(); jpegParams.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT); jpegParams.setCompressionQuality(JPEGcompression); } //new Write and clean up imageWriter.write(imageMetaData, new IIOImage(image_to_save, null, null), null); ios.close(); imageWriter.dispose(); }

这样就完美的解决了,亲测有效,如果想要整个工具类的朋友可以去我的另一篇播客查看https://blog.csdn.net/weixin_43549912/article/details/103269117

最后

以上就是沉默小猫咪最近收集整理的关于maven编译提示:程序包com.sun.image.codec.jpeg不存在,替换为ImageIO解决办法的全部内容,更多相关maven编译提示:程序包com内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(111)

评论列表共有 0 条评论

立即
投稿
返回
顶部