TIFFイメージの処理方法がわかりませんが、ストレートJava標準のImageIOライブラリを使用してそれらを読み書きすることはできません。何かご意見はありますか?
ありがとう。
何らかの理由でJAIが気に入らない、または使用できない場合は、ImageIO用のTIFF ImageReaderプラグインを作成しました。これは GitHub から入手できます。これは純粋なJavaであり、ネイティブインストールを必要とせず、非常に使いやすいオープンソースライセンス(BSD)が付属しています。
これは、多くの標準拡張機能とともに、任意のベースラインTIFFオプションをサポートします。バージョン3.1以降、TIFFプラグインも書き込みサポートを備えています。
クラスパスに適切なJARがあれば、次のように簡単に使用できます。
BufferedImage image = ImageIO.read(inputTIFF);
// ...modify image (compose, resize, sharpen, etc)...
ImageIO.write(image, "TIFF", outputTIFF);
JEP 262:TIFF Image I/O によれば、JAIの一部であったTIFFプラグインは、Java SEの一部としてJavaから利用できるようになります9。
つまり、Java 9以降を使用すると、追加のインポートや依存関係がなくても次のコードが機能します。
BufferedImage image = ImageIO.read(inputTIFF);
// ...modify image (compose, resize, sharpen, etc)...
ImageIO.write(image, "TIFF", outputTIFF);
このプラグインで非ベースラインTIFFフレーバーのサポートを確認することはまだできていませんが、少なくともベースラインTIFFは完全にサポートされているはずです。
JAIを試しましたが、うまくいきませんでした。
どこに行き詰まっていますか?以下はあなたのために働きますか?
import Java.io.File;
import Java.io.FileOutputStream;
import Java.awt.image.RenderedImage;
import com.Sun.image.codec.jpeg.JPEGCodec;
import com.Sun.image.codec.jpeg.JPEGImageEncoder;
import javax.media.jai.NullOpImage;
import javax.media.jai.OpImage;
import com.Sun.media.jai.codec.SeekableStream;
import com.Sun.media.jai.codec.FileSeekableStream;
import com.Sun.media.jai.codec.TIFFDecodeParam;
import com.Sun.media.jai.codec.ImageDecoder;
import com.Sun.media.jai.codec.ImageCodec;
public class Main {
public static void main(String args[]) {
File file = new File("input.tif");
try {
SeekableStream s = new FileSeekableStream(file);
TIFFDecodeParam param = null;
ImageDecoder dec = ImageCodec.createImageDecoder("tiff", s, param);
RenderedImage op = new NullOpImage(dec.decodeAsRenderedImage(0),
null,
OpImage.OP_IO_BOUND,
null);
FileOutputStream fos = new FileOutputStream("output.jpg");
JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos);
jpeg.encode(op.getData());
fos.close();
}
catch (Java.io.IOException ioe) {
System.out.println(ioe);
}
}
}