JPanel の画像をベクター グラフィックス ファイルにエクスポートして、画面よりも高い解像度で編集および印刷できるようにしたいと考えています。基本的にpaint()
、描画コマンドをベクターグラフィックファイルに保存する目的の Graphics でその関数を呼び出す必要があります。
これを行うための良い、簡単な方法は何ですか? おすすめのライブラリは?どのベクター形式が最適で、その理由は何ですか?
JPanel の画像をベクター グラフィックス ファイルにエクスポートして、画面よりも高い解像度で編集および印刷できるようにしたいと考えています。基本的にpaint()
、描画コマンドをベクターグラフィックファイルに保存する目的の Graphics でその関数を呼び出す必要があります。
これを行うための良い、簡単な方法は何ですか? おすすめのライブラリは?どのベクター形式が最適で、その理由は何ですか?
The Java EPS Graphics2D packageを見てください。
多くの Java プログラムは、Graphics2D を使用して画面に描画します。出力を png または jpeg ファイルとして保存するのは簡単ですが、ドキュメントや紙に含めるために EPS としてエクスポートするのは少し困難です。
このパッケージを使用すると、EpsGraphics2D オブジェクトを Graphics2D オブジェクトのように使用できるため、プロセス全体が非常に簡単になります。唯一の違いは、実装されているすべてのメソッドが EPS 出力を作成することです。つまり、JEPG や PNG ファイルなどのピクセルベースの画像のサイズを変更するときに表示されるギザギザのエッジにつながることなく、描画するダイアグラムのサイズを変更できます。
Apache Batikを使用すると、Graphics2Dオブジェクトの特殊な実装にペイントしてから、スケーラブルベクターグラフィックス(.svg)ファイルとしてエクスポートできます。その後、SVG対応のブラウザを使用して表示/処理/印刷できます(Firefoxは自然に処理し、ISTR、IEなどはプラグインを使用できます)。
SVGGraphics2Dオブジェクトを参照してください(プロセスはここに記載されています)
VectorGraphics2Dライブラリ (LGPL)をお勧めします。Graphics2D のすべての機能をサポートしているわけではありませんが、自分のプロジェクトでは問題なく使用できました。さまざまなベクター ファイル形式の java.awt.Graphics2D の実装を提供します。すべてのペイント操作を EPS、SVG、または PDF ファイルにエクスポートするだけです。
同じ要件を持つ人々のための追加のライブラリ:
これらの GPLv3 は両方とも、JFreeChartおよびOrson Chartsで広く使用されており、十分にテストされています。
FreeHEP は非常にうまく機能しているようですが、もうメンテナンスされていないようで、バグとフォーラム ページはなくなっています。ほんの一握りの行で、任意のコンポーネントをさまざまなスケーラブルで通常の画像形式に保存できるポップアップ ダイアログが表示されます。アルファ チャンネル、回転したテキスト、曲線で囲まれた領域を使用した挑戦的な画像がいくつかありますが、それらは完全に保存され、VectorGraphics2D のほうがはるかに優れています。
これまでに見た唯一の問題は、すべての画像が黒くなる jpeg 保存です。これは、png が機能し、すべてのベクター モードが機能することを考えると、それほど重要ではありませんが、一部の人にとっては問題になると確信しています。
これらすべてのモードで保存するには、まさにこれだけのコードを追加する必要がありました。
public static void showImage(Component comp)
{
try
{
ExportDialog export = new ExportDialog();
export.showExportDialog( null, "Export view as ...", comp, "export" );
System.err.println("Image save complete");
}
catch(Exception e)
{
e.printStackTrace();
}
}
追加する必要があるライブラリ jar も多数あります。
低レベルのJavaAPIはラスター(ピクセル)の観点から機能し、ベクター形式で保存されることはないため、これは基本的に直接不可能です。(java.awt.GraphicsのAPIをチェックして、私が何を意味するかを確認してください)。
ラスターをベクター形式に変換する汎用プログラムがいくつかあります。これは、クイック検索で見つけたものです:http: //autotrace.sourceforge.net/index.html
したがって、このようなプログラムを使用すると、問題を2つの小さな問題に分割できます。