JavaコードベースをImageIOからTRANSLATEERM1ENDへ移行する方法
このガイドでは、既存のJavaコードベースを、ほとんど、あるいはまったく変更せずに JDeli を利用する方法を説明します。
JDeli では、既存のJava画像処理コードを移行するための2つの異なるアプローチを提供しています:
- ImageIOプラグインアプローチ - コード変更不要
- 直接APIアプローチ - 完全な制御と拡張API
このアプローチにより、既存のコードに一切手を加えることなく、JDeli の性能と形式サポートをすぐに活用できます。
ImageIOプラグインは、JDeli をImageIOのサービスプロバイダとして登録します。コードが ImageIO.read() または ImageIO.write() を呼び出すと、Javaは自動的にデフォルトのハンドラの代わりに JDeli の実装にそれらの呼び出しをルーティングします。
Mavenプロジェクトの場合:
<dependency>
<groupId>com.idrsolutions</groupId>
<artifactId>jdeli-imageio</artifactId>
<version>3.0</version>
</dependency>
Gradleプロジェクトの場合:
dependencies {
implementation 'com.idrsolutions:jdeli-imageio:3.0'
}
既存のコードは以前と全く同じように動作しますが、JDeli を使用するようになります。
// Your existing code - no changes needed!
BufferedImage image = ImageIO.read(new File("photo.heic"));
ImageIO.write(image, "jpeg", new File("output.jpg"));
デフォルトでは、プラグインはAVIFとHEICのサポートを登録します。サポートされているすべてのフォーマットに JDeli を有効にする場合は、次の初期化コードを追加します:
import com.idrsolutions.image.imageio.ImageIOSupport;
import com.idrsolutions.image.utility.InputFormat;
import com.idrsolutions.image.utility.OutputFormat;
// Register all supported formats
ImageIOSupport.registerReaders(InputFormat.values());
ImageIOSupport.registerWriters(OutputFormat.values());
// Register a supported format
ImageIOSupport.registerReader(InputFormat.BMP)
ImageIOSupport.registerWriter(OutputFormat.BMP)
// Unregister a supported format
ImageIOSupport.unregisterReader(InputFormat.HEIC)
ImageIOSupport.unregisterWriter(OutputFormat.HEIC)
最大の制御、パフォーマンス最適化、JDeli の高度な機能にアクセスしたい開発者向けに、直接 JDeli APIが利用可能です。
まず、プロジェクトに JDeli を追加します。このライブラリは、外部依存関係のない単一のJARファイルとして配布されています。
Maven(トライアルまたはライセンスの資格情報が必要):
<dependencies>
<dependency>
<groupId>com.idrsolutions</groupId>
<artifactId>jdeli</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
Gradle:
dependencies {
implementation 'com.idrsolutions:jdeli:1.0'
}
または、JARファイルを直接クラスパスに追加することもできます。
切り替えは簡単です - JDeli のAPIはImageIOの簡潔さを反映しています:
変更前(ImageIO):
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
BufferedImage image = ImageIO.read(new File("input.jpg"));
ImageIO.write(image, "png", new File("output.png"));
変更後(JDeli):
import com.idrsolutions.image.JDeli;
import java.awt.image.BufferedImage;
import java.io.File;
BufferedImage image = JDeli.read(new File("input.jpg"));
JDeli.write(image, "png", new File("output.png"));
直接APIにより、ImageIOでは利用できない強力な機能にアクセスできます:
1. タイプセーフな形式指定:
import com.idrsolutions.image.utility.OutputFormat;
BufferedImage image = JDeli.read(new File("photo.heic"));
JDeli.write(image, OutputFormat.PNG, new File("output.png"));
2. カスタムエンコーダオプション:
import com.idrsolutions.image.jpeg.options.JpegEncoderOptions;
BufferedImage image = JDeli.read(inputFile);
JpegEncoderOptions options = new JpegEncoderOptions();
options.setQuality(95);
JDeli.write(image, options, new File("high-quality.jpg"));
3. チェーン型画像処理:
import com.idrsolutions.image.processing.ImageProcessingOperations;
BufferedImage image = JDeli.read(inputFile);
ImageProcessingOperations operations = new ImageProcessingOperations()
.scale(0.5)
.rotate(90)
.blur();
BufferedImage processed = operations.apply(image);
JDeli.write(processed, "jpeg", outputFile);
4. ワンステップ変換:
// Convert and process in a single operation
JDeli.convert(
new File("input.tiff"),
new File("output.webp"),
new ImageProcessingOperations().scale(0.75)
);
両方の移行パスで同じ高性能 JDeli コアライブラリを使用するため、どちらを選んでも同じ速度改善と形式サポートが得られます。以下は簡単な判断マトリックスです:
| 状況 | 最適なアプローチ |
|---|---|
| 大規模な既存コードベース | ImageIOプラグイン |
| 数日ではなく数時間で移行したい | ImageIOプラグイン |
| コードレビューを最小限に抑えたい | ImageIOプラグイン |
| 新規プロジェクトを開始 | 直接API |
| カスタムエンコーダ設定が必要 | 直接API |
| 画像処理チェーンが必要 | 直接API |
| 最大限のパフォーマンス調整が必要 | 直接API |
Q: 段階的に移行できますか?
はい!両方のアプローチは並行して動作します。既存のコードにはプラグインを、新機能には直接APIを使い始めることができます。
Q: 既存のテストは引き続き合格しますか?
ほとんどの場合、そうです。JDeli は、改善を加えながらImageIOと互換性を保つように設計されています。
Q: 問題が発生した場合はどうすればよいですか?
JDeli のお客様は、開発者から直接サポートを受けられ、迅速な対応と、多くの場合数日以内の日次ビルドへの修正が行われます。
Q: 移行は元に戻せますか?
もちろんです。プラグインアプローチでは、依存関係を単に削除できます。直接APIでは、変更は最小限で、必要に応じて簡単に元に戻すことができます。
