উচ্চ-মানের (বিটম্যাপ নয়) ডায়াগ্রাম সফ্টওয়্যার


14

আমি পিএনএফ, পোস্টস্ক্রিপ্ট, উইন্ডোজ মেটাফিল বা অন্য কিছু যা 1200x1200 ডিপিআই বা আরও ভাল দেখতে ভাল লাগবে তার চেয়ে উচ্চমানের ডায়াগ্রাম তৈরি করতে, তুলনায় আমি সফটওয়্যারটি খুঁজছি । আমি ভেবেছিলাম বিভিন্ন দাবা ইঞ্জিন এটি করবে, তবে তাদের ডায়াগ্রামগুলি সমস্ত বিটম্যাপস (যতদূর আমি বলতে পারি) এবং যথেচ্ছভাবে পুনরায় আকার দেওয়ার সময় আবর্জনার মতো দেখতে। এছাড়াও, তাদের নিজস্ব প্রকাশনা রফতানি কোনও স্ট্যান্ডার্ড, এএএএফআইটিতে সম্পাদনা করা যায় না।

দিতে ইচ্ছুক.


পরীক্ষা করে দেখুন apronus.com/chess/diagram/editor/... - সম্ভবত এই বিশাল ডায়াগ্রামে সব পরে আপনার চাহিদা পূরণ হবে। যে কোনও ক্ষেত্রে, আপনি আপনার নির্দিষ্ট প্রয়োজন অনুসারে সরঞ্জামটি তৈরির বিষয়ে ওয়েবমাস্টার (আমার) সাথে যোগাযোগ করতে পারেন।
DrCapablasker

আমি আমার আগের মন্তব্যে যেমন লিখেছি আমি আপনার প্রয়োজনীয় সরঞ্জামটি সরবরাহ করতে পারি। আমি প্রতিটি খণ্ডের জন্য স্বতন্ত্র এসভিজি ফাইলগুলি থেকে একটি এসভিজি ডায়াগ্রাম তৈরি করার কথা ভাবছি। আমার পরামর্শ মতো আপনি আমার সাথে যোগাযোগ না করে একটি অনুগ্রহ শুরু করেছেন।
DrCapablasker

আপনি কি লেটেক্স প্যাকেজ "স্ক্যাক": লিঙ্কটি বিবেচনা করেছেন ? এটি সরাসরি একটি FEN স্ট্রিং নিতে পারে।
মার্কিন হজোর্ট

উত্তর:


11

হিসাবে উল্লেখ করা হয়েছে, আপনার ভেক্টর দরকার need আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি এসভিজি ভেক্টর চিত্রগুলি তৈরি করতে পাইথন-দাবা ব্যবহার করুন।

পূর্বশর্ত:

  1. পাইথন 2.6+ বা 3.3+
  2. পাইথন-দাবা :
    • পাইপ ব্যবহার করে ফর্ম পাইপি ইনস্টল করুন :pip install python-chess[uci,gaviota]

স্ক্রিপ্ট তৈরি করা হচ্ছে

যেহেতু আপনার একাধিক এসভিজি তৈরি করার দরকার হতে পারে, আসুন একটি স্ক্রিপ্ট তৈরি করুন। সুতরাং, আপনি একাধিক দাবা বোর্ডগুলি সহজেই তৈরি করতে স্ক্রিপ্টটি ব্যবহার করতে পারেন। নীচে পাইথন ৩.x লিখিত আছে। উদাহরণস্বরূপ একটি পাইথন স্ক্রিপ্ট তৈরি করুন, 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()

আপনি যদি লিনাক্সে থাকেন তবে স্ক্রিপ্টটি শুরু করুন #!/usr/bin/env python3

ব্যবহার

আপনি যদি অজগরটি জানেন তবে এখন এটি একটি খুব সাধারণ স্ক্রিপ্ট তবে আমি কোডিং করি না তাদের পক্ষে এটি সহজ রাখতে চাই। স্ক্রিপ্টটি ব্যবহার করতে, সিএমডি / টার্মিনাল খুলুন যেখানে আপনি স্ক্রিপ্টটি সংরক্ষণ করেছেন। তারপরে, নিম্নলিখিত হিসাবে ব্যবহার করুন:

./FENtoSVG.py "examplefen" "morefen"

বলুন আমি ফেনের জন্য দুটি এসভিজি চাই "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"

এটি দুটি ফাইল তৈরি করবে: 88884N3888 w - - 0 1.SVGএবং88884Q3888 w - - 0 1.SVG

বিল্ট-ইন ফাংশনগুলি ব্যবহার করে ডায়াগ্রামে সহজেই তৈরি করা যেতে পারে এমন কাস্টমাইজেশনের কারণে আমি পাইথন-দাবাটির পরামর্শ দিই। এটিও ভালভাবে নথিভুক্ত করা হয়।


পরিষ্কার, সহজেই ব্যবহারযোগ্য এবং ব্যাপক সুপারিশের জন্য অভিনন্দন, @ ফ্লুকসেইন। আমি আমার প্রকাশনা প্রয়োজনের জন্য এই পদ্ধতির এক নজরে নিচ্ছি সম্প্রদায় স্বাগতম!
jaxter

ধন্যবাদ! এটি এখনও আমার জন্য বরং ক্লান্তিকর কাজ তাই আমি আমার প্রয়োজনীয়তার জন্য দ্রুত পর্যাপ্ত সমাধান না করা পর্যন্ত আমি আপডেট করে চলেছি।
মিঃফ্রেগ

অনুগ্রহ প্রদান করা কারণ এটি এখন পর্যন্ত সেরা, তবে ওয়ার্ড প্রসেসিংয়ের সাথে সুসংহত কিছু করার জন্য আমাদের একটি উপায় রয়েছে।
অ্যান্ড্রু লাজার

একটি দুর্দান্ত লাইব্রেরিতে দুর্দান্ত টিপস। শেষ পদক্ষেপের জন্য তীর নির্দিষ্টকরণের কোনও উদাহরণ আছে, বা বোর্ডের স্টাইল? স্পষ্ট করে বলার জন্য - / FENtoSVG.py এর মাধ্যমে নয়, বরং পাইথন-দাবা দ্বারা আমার নিজস্ব স্ক্রিপ্টে এটি করার চেষ্টা করছেন।
জো

3

একটি ভেক্টর বিন্যাস অনুসারে।

আপনারা জানেন যে ভেক্টর ফর্ম্যাটটি গ্রাফিককে বিটম্যাপ হিসাবে নয় বরং জ্যামিতিকভাবে একটি গাণিতিক বিবরণ হিসাবে উপস্থাপন করে যা কোনও স্কেলে রেন্ডার করা যায়।

ওয়েব প্রদর্শনের জন্য, আপনি এসভিজি ফর্ম্যাটটি ব্যবহার করতে পারেন। এসভিজি ফর্ম্যাটে এখানে কিছু দাবাগান রয়েছে। (যদি আপনি প্রতিটি দাবাওয়ানের জন্য লিঙ্কটি অনুসরণ করেন তবে "আসল ফাইল (এসভিজি ফাইল)" এ ক্লিক করুন through

পিডিএফ প্রদর্শনের জন্য, টেক্সের কাছে আপনি ব্যবহার করতে পারেন এমন কয়েকটি প্যাকেজ রয়েছে। এখানে একটি তালিকা। কিন্তু পরিসমাপ্তি ডায়াগ্রামে ভালো উদাহরণস্বরূপ, পি দেখুন 4; (এই সুবিধাজনক শুধুমাত্র যদি আপনি টেক্স বা ক্ষীর সাথে পরিচিত হয়।। এই PDF উদাহরণ Skak শৈলী অধিকন্তু, আমি বিশ্বাস করি যে পি 4।। এই PDF উদাহরণ শো শোয়ালবে-দাবা স্টাইল, আপনি পছন্দ করতে পারেন, যদিও এর ডকুমেন্টেশনগুলি সমস্ত জার্মান ভাষায় মনে হয় seems এগুলি যে কোনও হারে মুক্ত উত্স)


1
আমি মনে করি আপনার শেষ উদাহরণে (সুরেলা) চিত্রগুলি নিম্ন মানের। সাদা স্কোয়ারগুলি খুব সামান্য অনুভূমিক স্থান ব্যবহার করে, তাই তারা এইচ-ফাইল এবং বোর্ড প্রান্তের মধ্যে বড় ফাঁক রেখে, বাম দিকে খুব বেশি দূরে। সেই চিত্রগুলি আমার কাছে এমনভাবে দেখে যেন সেগুলি ল্যাটেক্স প্যাকেজ "দাবা-সমস্যা-চিত্র" দিয়ে তৈরি করা হয়েছিল, যা ctan.org/tex-archive/macros/latex/contrib/… এ উপলব্ধ । সেই প্যাকেজটি ব্যবহার করে আমি যে চিত্রগুলি তৈরি করেছি তাতে একই বাগ রয়েছে।
রোজি এফ

3

আমার সমাধানটি হচ্ছে দাবা মেরিদা বা দাবা কেসগুলির মতো দাবা ফন্ট ব্যবহার করা ।

যেমন একটি ফন্ট সহ উদাহরণস্বরূপ শুরুর অবস্থানটি এইভাবে লেখা হয়:

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

এবং (ধরে নিলে লাইন-উচ্চতা হরফের উচ্চতায় সেট করা হয়েছে) এটি দেখতে দেখতে এটি দেখতে (এখানে দাবা মেরিডাকে ফন্ট হিসাবে ব্যবহার করে ):

এখানে চিত্র বর্ণনা লিখুন

সুতরাং আমি এই পাইথন স্ক্রিপ্টটি লিখেছি যা ফেন থেকে এই ফর্ম্যাটে রূপান্তর করে। এই স্ক্রিপ্টটি কল করুন (ধরে নিলেন আপনি এর নাম দিয়েছেন 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))

এই ডায়াগ্রাম ফন্টগুলি বিন্দু বা তারকারা চিহ্নিত চিহ্নযুক্ত স্কোয়ারগুলি সমর্থন করে, অন্য ধরণের সীমানা, বৃত্তাকার সীমানা কোণ, বাম / নীচে সীমা / কলামগুলি চিহ্নিত করে নম্বর / বর্ণগুলি। আমি এটিকে স্ক্রিপ্টে অন্তর্ভুক্ত করি নি। আমার কোড আপডেট করতে নির্দ্বিধায়।

দাবাজ একটি ফন্ট পরিবার তৈরি করেছে ('ডায়াগ্রামটি ...' দিয়ে শুরু করে) যা আরও বেশি স্টাফ সমর্থন করে (যেমন টুকরোগুলি 180 by দ্বারা পরিবর্তিত হয়) তবে এই ফন্টটি বিভিন্ন কোড পয়েন্টগুলিতে ম্যাপ করে, কালো স্কোয়ারের জন্যও দুটি অক্ষর নেওয়া হয়, একটি পটভূমির জন্য এবং টুকরা জন্য একটি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.