22

Mac OS X 10.6でデーバナーガリー合字(Unicode文字列)を正しくレンダリングしようとしています。

文字列はに描画され、JComponentアンチエイリアスにRenderingHints使用されます。結紮はWindowsXPSP2と7、およびUbuntuで正しく表示されますが、Mac OS Xでは、結紮は分解され(つまり、正しくマージされません)、ダイアクリティックはそれらの位置から移動されます(以下のスクリーンショットを参照)。左側のWinXPSP2からの正しいレンダリング例(RenderingHintsアンチエイリアスキーをON使用)、右側のMac OS X 10.6.7からの間違ったレンダリング例(Antialising DEFAULT= OFF)。

フォントを次のように設定したので、どのシステムでもデフォルトのフォントを使用する必要があります。

new Font(null,Font.PLAIN,20);

これはすべて、Macのデフォルトの文字エンコードがMacRoman(UTF-8サブセットではない)であり、他のシステム(Windowsなど)がUTF-8サブセット(WinLatin-1など)を使用しているという事実と関係があると思います。 )またはcp1252など。

この情報が手元にあるとしても、私はこの問題をどのように処理するかについて暗闇に包まれています。したがって、誰かが私を正しい方向に向けることができれば、私は非常にありがたいです。

同じ文字列の正しいレンダリングと正しくないレンダリング

私はすでにいくつかのことを試しました:

  • フォントをデーバナーガリーMTに設定しても、問題は解決しませんでした
  • TextAttribute LIGATURES_ON問題を解決しなかった

他の開発者(できれば、Macで開発するヒンディー語のバックグラウンドを持つ)によるヒントやコードスニペットに非常に感謝します。

4

4 に答える 4

6

私自身は専門家ではありませんが、ここにいくつかの指針があります。私がウィキペディアから理解した限りでは、問題はあなたのフォントにある可能性が非常に高いです。長い引用を前もってお詫びしますが、そうでなければ、2つのウィキペディアの記事をリンクすることができたはずです。

ここにUnicodeの記事からの合字に関するセクションの一部があります:

合字

アラビア語やデーバナーガリー語を含む多くのスクリプトには、文字形式の特定の組み合わせを特別な合字形式に組み合わせる必要がある特別な正書法規則があります。合字の形成を管理するルールは非常に複雑になる可能性があり、ACE(1980年代のDecoTypeによるアラビア語のカリグラフィエンジンであり、Unicode標準の印刷版ですべてのアラビア語の例を生成するために使用された)などの特別なスクリプト整形テクノロジーが必要です。 OpenType(AdobeおよびMicrosoftによる)、Graphite(SIL Internationalによる)、またはAAT(Appleによる)の概念実証。

AAT(Apple Advanced Typography)の記事をさらに読むと、次の情報が明らかになります。記事全体を読むことをお勧めします。

MacOSXのAATとOpenType

Mac OS X 10.5 Leopard以降、OpenTypeの部分的なサポートが利用可能です。現在、サポートは西洋のスクリプトとアラビア語に限定されています(2011年現在)。フォントにAATテーブルがある場合、それらはタイポグラフィに使用されます。フォントにAATテーブルがなく、OpenTypeテーブルがある場合、システムがサポートする範囲でそれらが使用されます。

つまり、Mac OS X 10.5では、欧米または中東のスクリプト用の多くのOpenTypeフォントを変更せずに使用できますが、タイやデーバナーガリーなどの南アジアのスクリプトは使用できません。これらには、適切なレイアウトのためにAATテーブルが必要です。

そして、フォントレイアウトに関するセクションの後半で:

AATは完全にグリフで動作し、文字では動作しないため、適切な表示を生成するために必要なすべてのレイアウト情報は、フォント自体に存在します。これにより、OSからの特別なサポートを必要とせずに、新しいスクリプトにフォントを追加できます。

そして最後:

インド語スクリプトのAAT

インド語群の場合、必要な機能はグリフの並べ替えと置換だけです。AATはこれらの両方をサポートしています。上記のように、IndicスクリプトのOpenTypeフォントでは、Mac OS Xで正しく機能する前に、AATテーブルを追加する必要があります。ただし、これは、OpenTypeのシステムサポートに依存するソフトウェアにのみ適用されることに注意してください。OpenTypeの独自の実装を提供するプログラムは、OpenTypeフォントでIndicを適切にレンダリングします。(ただし、AATテーブルを使用してインド語フォントを正しくレンダリングしない場合があります。)

Mac OS X 10.5には、デーバナーガリー文字、グルムキー文字、グジャラート語、タイ語、チベット語、タミル語のフォントが付属しています。他のインド語スクリプトのフォントは、サードパーティから入手できます。

デーバナーガリーを明示的にサポートするフォントを選択する必要があるかもしれません。

于 2011-05-17T15:36:09.937 に答える
3

Java2Dレンダラーの代わりにQuartzレンダラーを使用します。

これにより、グリフレンダリングの品質に大きな違いが生じます。ここで提案されているように、最初に実行する必要があります。

if (System.getProperty("os.name").startsWith("Mac OS X")) {
    System.setProperty("apple.awt.graphics.UseQuartz", "true");
}

を適用できるTextLayoutので、の使用も検討してください。FontRenderContextRenderingHints.KEY_FRACTIONALMETRICS

于 2011-06-20T05:38:47.443 に答える
1

グルムキー文字で作業しているプロジェクトでも、まったく同じ問題が発生しています。Mac OS XにバンドルされているAATテーブル付きのフォント(Gurmukhi MT、Gurmukhi MN)とOpenTypeテーブル付きのフォントの両方を試しました。どちらもMacOSXのJAVAでは機能しませんが、OpenTypeフォントの方が少し読みやすくなっています。唯一の問題は、「halant」文字が半分の形式の文字を本来のようにレンダリングしないことです。

問題は、使用しているフォントとMacOSX上のJAVAとの互換性にあると思います。

于 2011-06-16T18:20:07.610 に答える
0

タミル語のMacでhttp://jambula.sourceforge.netを試したときに、同じ問題に直面しました。

私が思いついた回避策は、Font.createFontを使用して明示的なフォントをロードすることでした。

テストプログラムは、TestRendering.javaで確認できます。

java org.jambula.image.TestRendering text.png

text.pngでタミル語のテキストが正しくレンダリングされない

でも

java org.jambula.image.TestRendering text.png "/Library/Fonts/Arial Unicode.ttf"

正しくレンダリングします。

https://bugs.openjdk.java.net/browse/JDK-7162125が原因である可能性があります。

于 2016-03-17T19:28:51.133 に答える