FEN을 사용하여 PDF, Postscript, Windows 메타 파일 또는 1200x1200dpi 이상으로 잘 보이는 고품질 다이어그램을 생성 할 수있는 것보다 소프트웨어를 찾고 있습니다 . 다양한 체스 엔진이 그렇게 할 것이라고 생각했지만 다이어그램은 모두 비트 맵이며 (알 수있는 한) 임의로 크기를 조정할 때 쓰레기처럼 보입니다. 또한 자체 게시 내보내기는 AFAICT 표준에서 편집 할 수 없습니다.
지불 할 용의.
FEN을 사용하여 PDF, Postscript, Windows 메타 파일 또는 1200x1200dpi 이상으로 잘 보이는 고품질 다이어그램을 생성 할 수있는 것보다 소프트웨어를 찾고 있습니다 . 다양한 체스 엔진이 그렇게 할 것이라고 생각했지만 다이어그램은 모두 비트 맵이며 (알 수있는 한) 임의로 크기를 조정할 때 쓰레기처럼 보입니다. 또한 자체 게시 내보내기는 AFAICT 표준에서 편집 할 수 없습니다.
지불 할 용의.
답변:
thb가 지적했듯이 벡터가 필요합니다. 파이썬 벡터를 사용하여 SVG 벡터 이미지를 생성하는 것이 좋습니다.
SVG를 여러 개 생성해야 할 수도 있으므로 스크립트를 만들어 봅시다. 따라서 스크립트를 사용하여 여러 개의 체스 판을 쉽게 생성 할 수 있습니다. 다음은 Python 3.x로 작성되었습니다. 예를 들어, FENtoSVG.py와 같은 Python 스크립트를 작성하십시오. 다음 코드를 삽입하십시오.
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
.
파이썬을 알고 있다면 이것은 매우 간단한 스크립트이지만 코딩하지 않는 사람들을 위해 간단하게 유지하고 싶습니다. 스크립트를 사용하려면 스크립트를 저장 한 CMD / 터미널을여십시오. 그런 다음 다음과 같이 사용하십시오.
./FENtoSVG.py "examplefen" "morefen"
FEN "8/8/8/8/4N3/8/8/8 w - - 0 1"
과에 두 개의 SVG를 원한다고 가정 해 보겠습니다 "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"
이 두 개의 파일을 만들 것입니다 : 88884N3888 w - - 0 1.SVG
및88884Q3888 w - - 0 1.SVG
내장 함수를 사용하여 다이어그램을 쉽게 만들 수있는 사용자 지정으로 인해 python-chess를 제안합니다. 또한 잘 문서화되어 있습니다.
벡터 형식 에 맞게 것이다.
아시다시피, 벡터 형식은 그래픽을 비트 맵이 아니라 기하학적으로 표현하여 모든 규모로 렌더링 할 수있는 수학적 설명으로 나타냅니다.
웹 표시에는 SVG 형식을 사용할 수 있습니다. 다음 은 SVG 형식의 일부 체스 맨입니다. 링크를 따라 가면 각 체스 맨에 대해 "원본 파일 (SVG 파일)"을 클릭하십시오. 클릭 할 때까지 SVG에 대한 비트 맵, PNG 근사치 만 얻을 수 있습니다. 실제 SVG를 원합니다.)
PDF 표시를 위해 TeX에는 사용할 수있는 여러 패키지가 있습니다. 여기 에 목록이 있습니다. (TeX 또는 LaTeX에 익숙한 경우에만 편리하지만 결과 다이어그램은 양호합니다. 예를 들어 Skak 스타일 의이 PDF 예제 4 페이지를 참조하십시오 . 또한 이 PDF 예제의 4 페이지 는 Schwalbe-chess 스타일은 문서가 모두 독일어로되어 있지만 선호 할 수도 있지만, 모두 오픈 소스입니다.)
내 솔루션은 Chess Merida 또는 Chess Cases 와 같은 체스 글꼴을 사용하는 것 입니다.
예를 들어 이러한 글꼴을 사용하면 시작 위치가 다음과 같이 작성됩니다.
1222222223
4tMvWlVmT5
4OoOoOoOo5
4 + + + +5
4+ + + + 5
4 + + + +5
4+ + + + 5
4pPpPpPpP5
4RnBqKbNr5
7888888889
그리고 (행 높이가 글꼴 높이로 설정되어 있다고 가정하면) 다음과 같습니다 (여기서는 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도 회전 한 조각과 같은)이 글꼴은 다른 코드 포인트에 매핑합니다. 검은 사각형의 경우 두 글자가 사용됩니다. 배경과 조각에 대한 하나.