我们有一段旧代码,它仍然使用SunJAIApis从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运行时中不再存在了。但是我该如何替换这些导入呢?
1条答案
按热度按时间bttbmeg01#
上面的代码应该很容易直接移植到
ImageIO
。我尽可能地保留了变量名,使其更容易理解,并重写为使用try-with-resources。我相信这应该可以工作: