【发布时间】:2021-12-02 17:39:32
【问题描述】:
我们有一段旧代码,它仍然使用 Sun JAI API 从 tiff 文件创建 jpeg
private File createJPEG(String tifFilePath){
FileOutputStream fos = null;
SeekableStream s = null;
try {
s = new FileSeekableStream(tifFilePath);
TIFFDecodeParam param = null;
ImageDecoder dec = ImageCodec.createImageDecoder("tiff", s, param);
RenderedImage op = dec.decodeAsRenderedImage(0);
File jpgFile = new File(tifFilePath.replace("tif","jpg"));
fos = new FileOutputStream(jpgFile);
JPEGEncodeParam jpgparam = new JPEGEncodeParam();
jpgparam.setQuality(67);
ImageEncoder en = ImageCodec.createImageEncoder("jpeg", fos, jpgparam);
en.encode(op);
fos.flush();
}catch (IOException ex){
LOGGER.error(ex);
}finally {
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(s != null){
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
现在,对于具有较新 Java 版本的系统,这不再适用,运行此代码时出现错误 noclassdeffounderror com/sun/image/codec/jpeg/jpegcodec。
这些是进口:
import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.ImageEncoder;
import com.sun.media.jai.codec.JPEGEncodeParam;
import com.sun.media.jai.codec.SeekableStream;
import com.sun.media.jai.codec.TIFFDecodeParam;
import com.sun.media.jai.codec.TIFFEncodeParam;
现在我知道你不应该再使用 com.sun 包了,我得到的这个错误是因为 JPEGCodec 在我们在新系统中使用的 Java 运行时不再存在。但是如何替换这些导入?
【问题讨论】:
-
JAI 不是一直都是必须手动添加到类路径的外部库吗?但无论如何,ImageIO 已经存在了将近二十年。另请参阅包
javax.imageio.plugins.jpeg和javax.imageio.plugins.tiff以了解您的用例。 -
Software Recommendations SE上的相关问题。