gpt4 book ai didi

java - 从 JDK 1.5.0_06 迁移到 1.8.0_66 - 替换已弃用的 Java JPEG 类

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:07 24 4
gpt4 key购买 nike

我目前正在将应用程序从 JDK 1.5.0_06 迁移到 1.8.0_66。在应用程序中,有多个文件使用 com.sun.image.codec.jpeg 类。当我尝试创建 JAR 时,出现以下错误。

error: package com.sun.image.codec.jpeg does not exist import com.sun.image.codec.jpeg.*;

我在 Replacing the deprecated Java JPEG classes for Java 7 上引用了博客我的错误被清除了。但现在我收到以下警告:

warning: JPEGImageWriter is internal proprietary API and may be removed in a future release import com.sun.imageio.plugins.jpeg.JPEGImageWriter;

博客中有问题的代码:

public static void saveAsJPEG(String jpgFlag, BufferedImage image_to_save, float JPEGcompression, FileOutputStream fos) throws IOException {
// Image writer
JPEGImageWriter imageWriter = (JPEGImageWriter) ImageIO.getImageWritersBySuffix("jpeg").next();
ImageOutputStream ios = ImageIO.createImageOutputStream(fos);
imageWriter.setOutput(ios);

//and metadata
IIOMetadata imageMetaData = imageWriter.getDefaultImageMetadata(new ImageTypeSpecifier(image_to_save), null);

if (jpgFlag != null) {
int dpi = 96;

try {
dpi = Integer.parseInt(jpgFlag);
}
catch (Exception e) {
e.printStackTrace();
}

//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();
}

最佳答案

您的代码中有问题的行是:

JPEGImageWriter imageWriter = (JPEGImageWriter) ImageIO.getImageWritersBySuffix("jpeg").next();

根本不需要特定子类 (JPEGImageWriter) 的转换和使用。不依赖特定的插件子类也是一个好习惯。在这种情况下,只需使用 ImageWriter 基类即可。

ImageWriter imageWriter = ImageIO.getImageWritersBySuffix("jpeg").next();

其他一切都将像以前一样工作和运行。

注意:另一方面,JPEGImageWriteParam是公共(public) API 的一部分(javax.imageio.plugins.jpeg 包)并且需要访问 JPEG 特定的书写选项。这个用法完全没问题。

关于java - 从 JDK 1.5.0_06 迁移到 1.8.0_66 - 替换已弃用的 Java JPEG 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34919281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com