パッケージcom.sun.image.codec.jpegが存在しません



Package Com Sun Image




[url] http://www.vktone.com/articles/com-sun-image-codec-jpeg-not-found.html [/ url]
JDK1.7でコンパイルされた古いJavaコードの中には、次のようなエラーを報告するものがあります。パッケージcom.sun.image.codec.jpegが存在しません。

[javac] D: work mpa hyjc2 src hyjc image ImageUtil.java:87:エラー:シンボルが見つかりません

[javac] JPEGImageEncoderエンコーダー= JPEGCodec.createJPEGEncoder(out)
[javac] ^
[javac]シンボル:クラスJPEGImageEncoder

このJPEGImageEncoderはSunのプライベート実装であるためです。

通常、このようなJavaコードスニペットに表示されます。

FileOutputStream out = new FileOutputStream(dstName)
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out)
encoder.encode(dstImage)

次のようなJavaコードに変更する必要があります。

String formatName = dstName.substring(dstName.lastIndexOf('.') + 1)
//FileOutputStream out = new FileOutputStream(dstName)
//JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out)
//encoder.encode(dstImage)
ImageIO.write(dstImage, /*'GIF'*/ formatName /* format desired */ , new File(dstName) /* target */ )


画像形式のファイルの読み取りと書き込みに統合されたImageIOを使用するため、これは問題ありません。古い実装クラスJPEGImageEncoderクラスを使用する必要はありません。

インターネット上の多くの記事がこの問題について話しているので[パッケージcom.sun.image.codec.jpegは存在しません]、rt.jarの問題はアイデアに言及されていないと言われ、特別に公開されています。 、皆様のお役に立てれば幸いです。

一般に画像形式を操作する場合は、次のクラスが使用されることに注意してください。
import java.awt.image.BufferedImage
//import com.sun.image.codec.jpeg.JPEGCodec
//import com.sun.image.codec.jpeg.JPEGImageEncoder
import javax.imageio.ImageIO


メソッドを書く:
// 2013.05.04
static void saveImage(BufferedImage dstImage, String dstName) throws IOException {
String formatName = dstName.substring(dstName.lastIndexOf('.') + 1)
//FileOutputStream out = new FileOutputStream(dstName)
//JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out)
//encoder.encode(dstImage)
ImageIO.write(dstImage, /*'GIF'*/ formatName /* format desired */ , new File(dstName) /* target */ )
}