高品質(ビットマップではない)ダイアグラムソフトウェア


14

FENを使用して、PDF、Postscript、Windowsメタファイルなど、1200x1200 dpi以上で見栄えのよい高品質の図を生成できるソフトウェアを探しています。さまざまなチェスエンジンがそれを行うと思いましたが、それらの図はすべてビットマップであり(私の知る限り)、任意にサイズを変更するとゴミのように見えます。また、独自の公開エクスポートは、AFAICTの標準では編集できません。

支払うことを喜んで。


apronus.com/chess/diagram/editor/…をチェックしてください -おそらく、この大規模なダイアグラムは結局あなたのニーズを満たすでしょう。いずれの場合でも、特定のニーズに合わせてツールを調整することについて、ウェブマスター(私)に連絡することができます。
-DrCapablasker

以前のコメントで書いたように、必要なツールを提供できます。各作品の個々のSVGファイルからSVG図を作成することを考えています。あなたは私が提案したように私に連絡せずに報奨金を開始しました。
-DrCapablasker

ラテックスパッケージ "skak":linkを検討しましたか?FEN文字列を直接取得できます。
U. Hjortの

回答:


11

THBが指摘したように、ベクトルが必要です。python-chessを使用してSVGベクター画像を生成することをお勧めします。

前提条件:

  1. Python 2.6以降または3.3以降
  2. Pythonチェス
    • pipを使用してフォームpypiをインストールします。pip install python-chess[uci,gaviota]

スクリプトを作成する

複数のSVGを生成する必要があるかもしれないので、スクリプトを作成しましょう。そのため、スクリプトを使用して複数のチェスボードを簡単に生成できます。以下はPython 3.xで書かれています。Pythonスクリプト、たとえばFENtoSVG.pyを作成します。次のコードを挿入します。

import chess, sys
from chess import svg
'''
This imports python-chess module and sys module. 
Python-chess will generate the boards while sys.argv will take 
arguments for your script.
'''
svgstomake = (list(sys.argv))[1:]
for svgs in svgstomake:
    board = chess.Board(svgs)
    nameoffile = svgs.replace("/", "")+".SVG"
    boardsvg = chess.svg.board(board = board)
    filetowriteto = open(nameoffile, "w")
    filetowriteto.write(boardsvg)
    filetowriteto.close()

Linuxを使用している場合は、スクリプトを開始します#!/usr/bin/env python3

使用法

pythonを知っている場合、これは非常に単純なスクリプトですが、コーディングしていない人のために単純に保ちたいと思います。スクリプトを使用するには、スクリプトを保存したCMD / Terminalを開きます。次に、次のように使用します。

./FENtoSVG.py "examplefen" "morefen"

FENに2つのSVGが必要だ"8/8/8/8/4N3/8/8/8 w - - 0 1"とし"8/8/8/8/4Q3/8/8/8 w - - 0 1" 、次のように入力します。

./FENtoSVG.py "8/8/8/8/4N3/8/8/8 w - - 0 1" "8/8/8/8/4Q3/8/8/8 w - - 0 1"

これは、2つのファイルを作成します。88884N3888 w - - 0 1.SVG88884Q3888 w - - 0 1.SVG

組み込み関数を使用してダイアグラムを簡単にカスタマイズできるため、python-chessをお勧めします。また、十分に文書化されています。


明確で使いやすい包括的な推奨事項、@ Fluxeneinをおめでとうございます。私は出版のニーズに合わせてこのアプローチを検討しています。コミュニティへようこそ!
jaxter

ありがとう!まだ私にとっては退屈な仕事なので、おそらく私のニーズにも十分な速度のソリューションを作成/見つけるまで更新を続けるでしょう。
MrFregg

これまでのところ最高であるため、賞金を授与しますが、ワープロとうまく統合されたものに進む方法があります。
アンドリューラザロ

優れたライブラリに関する優れたヒント。最後の動き、またはボードのスタイルに矢印を指定する例はありますか?明確にするために-./FENtoSVG.pyではなく、python-chessを介して自分のスクリプトでそれを行うことを探しています。
ジョー

3

ベクトル形式は合うでしょう。

ご存じかもしれませんが、ベクター形式は、グラフィックをビットマップとしてではなく、幾何学的に、任意の縮尺でレンダリングできる数学的記述として表現します。

Web表示の場合、SVG形式を使用できます。ここでは SVG形式のいくつかの駒です。(リンクをたどると、チェスマンごとに「元のファイル(SVGファイル)」までクリックスルーします。クリックスルーするまで、ビットマップ化されたPNGがSVGに近似します。本物のSVGが必要です。)

PDF表示の場合、TeXには使用可能なパッケージがいくつかあります。以下にリストを示します。(これはTeXやLaTeXのに精通している場合にのみ便利である。しかし、結果として得られる図は良いです例えば、Pを参照してください4。。このPDFの例 Skakスタイルではまた、私はPを信じるの4。。このPDFの例を示していますあなたが好むかもしれないシュワルベチェススタイル、そのドキュメントはすべてドイツ語であるように思われます。これらはすべて、とにかくオープンソースです。


1
最後の例(ハーモニー)の図は低品質だと思います。白い四角は、使用する水平スペースが少なすぎるため、左に遠すぎて、hファイルとボードエッジの間に大きなギャップが残ります。これらの図は、cTeN.org / tex-archive / macros / latex / contrib /…にあるLaTeXパッケージ「chess-problem-diagrams」で作成されたように見えます。そのパッケージを使用して作成した図には、同じバグがあります。
ロージーF

3

私の解決策は、チェスメリダチェスケースなどのチェスフォントを使用することです。

たとえば、このようなフォントでは、開始位置は次のように記述されます。

1222222223
4tMvWlVmT5
4OoOoOoOo5
4 + + + +5
4+ + + + 5
4 + + + +5
4+ + + + 5
4pPpPpPpP5
4RnBqKbNr5
7888888889

そして(line-heightがフォントの高さに設定されていると仮定すると)次のようになります(ここではフォントとしてChess Meridaを使用しています):

ここに画像の説明を入力してください

そこで、fenからこの形式に変換するこのPythonスクリプトを書きました。このスクリプトを呼び出して(fen2diag.pyという名前を付けた場合python fen2diag.py "<the fen>"、ダイアグラム文字列を出力します。

import sys


def fen2diag(fen, borders=False):
    """
    Convert a fen to a diagram string used by fonts like
    'Chess Merida' and 'Chess Cases'.

    fen:        The fen. For example the fen for the startposition is
                'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1'.
    borders:    If the returned diagram string shall have borders.

    Returns the diagram string.
    """

    # We dont need anything except the piece positions.
    fen = fen[:fen.find(' ')]

    # Transposition table for the black pieces.
    # White pieces are the same in both formats.
    t = {'k': 'l', 'q': 'w', 'r': 't', 'b': 'v', 'n': 'm', 'p': 'o'}

    # If the current square is a white square or not.
    w = False

    def todiagletter(fenletter):
        """"
        Return the diagram letter corresponding to the letter in the fen.
        """

        nonlocal borders, w
        w = not w
        if fenletter == '/':
            # In the diagram font these are the characters for the diagram borders:
            # '1' upper left, '2' upper, '3' upper right,
            # '4' left, '5' right,
            # '7' bottom left, '8' bottom, '9' bottom right
            return '5\n4' if borders else '\n'
        else:
            # this code handles numbers in the fen, denoting empty squares.
            try:
                # this is a number between 1 and 8.
                n = int(fenletter)

                # This will be a string denoting empty squares.
                # Would be eg. ' + + + +' for an empty eight rank.
                spaces = []

                while n > 0:
                    # In the diagram font ' ' denotes a white square
                    # and '+' denotes a black square.
                    spaces.append(' ' if w else '+')

                    w = not w
                    n -= 1
                w = not w
                return ''.join(spaces)

            # this code handles piece letters in the fen.
            except ValueError:
                # a black piece
                if fenletter in t:
                    fenletter = t[fenletter]

                # In the diagram font lowercase letters denote
                # pieces on white squares and uppercase letters
                # denote pieces on black squares.
                return fenletter.lower() if w else fenletter.upper()

    diagram = ''.join(map(todiagletter, fen))
    if borders:
        return f'1222222223\n4{diagram}5\n7888888889'
    else:
        return diagram


if __name__ == '__main__':
    print(fen2diag(sys.argv[1], borders=True))

これらのダイアグラムフォントは、ドットまたは星でマークされた正方形、別の種類の境界線、丸い境界角、行/列を示す左/下の境界線上の数字/文字もサポートします。スクリプトにはこれを含めていません。コードを自由に更新してください。

Chessbaseはフォントファミリも作成し(「DiagramTT ...」で始まる)、さらに多くのもの(180°回転したピースなど)をサポートしますが、このフォントは別のコードポイントにマップします。また、黒い四角には2つの文字が使用されます。背景用と作品用です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.