উড়ন্ত উপর কার্নিং


10

কেউ কি এমন কোনও অ্যালগরিদম জানেন যা ব্যবহারকারীর পাঠ্য টাইপ করার সময় গ্লিফ আকারের উপর ভিত্তি করে অক্ষরগুলি স্বয়ংক্রিয়ভাবে কর্নিংয়ের গণনা করবে?

আমার অর্থ অগ্রিম প্রস্থ বা তত্সহ তুচ্ছ হিসাব নয়, আমি অক্ষরের মধ্যে চাক্ষুষভাবে অনুকূল দূরত্ব অনুমান করার জন্য গ্লাইফগুলির আকৃতি বিশ্লেষণ করতে চাইছি। উদাহরণস্বরূপ যদি আমরা একটি লাইনে ধারাবাহিকভাবে তিনটি অক্ষর রাখি তবে মাঝের অক্ষরটি অক্ষরের আকার সত্ত্বেও রেখার মাঝখানে হওয়া উচিত। একটি উদাহরণ কার্নিং-অন-ফ্লাই কার্যকারিতাটি আলোকিত করে:

দ্য ফ্লাইয়ে কার্নিংয়ের একটি উদাহরণ:

স্ক্রিনশট

উপরের চিত্রটি aখুব সঠিক বলে মনে হচ্ছে। এটা একটা স্থানান্তরিত করা উচিত নির্দিষ্ট পরিমাণ প্রতি Tযাতে এটি মাঝখানে মনে করা হয় Tএবং g। অ্যালগরিদমটির আকারগুলি Tএবং a(এবং সম্ভবত অন্যান্য অক্ষরগুলিও) পরীক্ষা করা উচিত এবং সিদ্ধান্ত নেওয়া উচিত যে কতটা aবামে স্থানান্তরিত করতে হবে। এই নির্দিষ্ট পরিমাণটি হ'ল আলগোরিদিমটি গণনা করা উচিত - ফন্টের পজিবল কের্নিংয়ের জুড়ি পরীক্ষা না করে।

আমি একটি জাভাস্ক্রিপ্ট (+ এসভিজি + এইচটিএমএল) প্রোগ্রাম কোডিংয়ের কথা ভাবছি যা হাতে আঁকা ফন্ট ব্যবহার করে এবং তাদের অনেকের কাছে কার্নিংয়ের জুড়ি নেই। পাঠ্যক্ষেত্রগুলি সম্পাদনাযোগ্য হবে এবং একাধিক ফন্টের পাঠ্য অন্তর্ভুক্ত করতে পারে। আমি মনে করি যে এই ক্ষেত্রে গড় পাঠ্য প্রবাহ নিশ্চিত করার জন্য ফ্লাইং-অন-দ্য ফ্লাইং একটি উপায় হতে পারে।

সম্পাদনা: এটির একটি সূচনা পয়েন্ট হ'ল এসভিজি ফন্ট ব্যবহার করা যায়, তাই পাথের মান পাওয়া সহজ। এসভিজি ফন্টে পথটিকে এইভাবে সংজ্ঞায়িত করা হয়:

<glyph glyph-name="T" unicode="T" horiz-adv-x="1251" d="M531 0v1293h
-483v173h1162v-173h-485v-1293h-194z"/>

<glyph glyph-name="a" unicode="a" horiz-adv-x="1139" d="M828 131q-100 -85
-192.5 -120t-198.5 -35q-175 0 -269 85.5t-94 218.5q0 78 35.5 142.5t93
103.5t129.5 59q53 14 160 27q218 26 321 62q1 37 1 47q0 110 -51 155q-69 61
-205 61q-127 0 -187.5 -44.5t-89.5 -157.5l-176 24q24 113 79 182.5t159
107t241 37.5 q136 0 221 -32t125 -80.5t56 -122.5q9 -46 9 -166v-240q0
-251 11.5 -317.5t45.5 -127.5h-188q-28 56 -36 131zM813 533q-98 -40 -294
-68q-111 -16 -157 -36t-71 -58.5t-25 -85.5q0 -72 54.5 -120t159.5 -48q104
0 185 45.5t119 124.5q29 61 29 180v66z"/>

অ্যালগরিদম (বা জাভাস্ক্রিপ্ট কোড) এর সেই পথগুলি কোনওভাবে পরীক্ষা করা উচিত এবং তাদের মধ্যে অনুকূল দূরত্ব নির্ধারণ করা উচিত।


1
আপনি যদি কোনও কোডিং সমাধান খুঁজছেন, তবে এটি আরও ভালভাবে জিজ্ঞাসা করা হবে। আপনি কি এটি খুঁজছেন? যদি তা হয় তবে আমি প্রশ্নটি সেখানে স্থানান্তরিত করব।
অ্যালান গিলবার্টসন

2
আমি সম্মত যে এটি একটি প্রশ্ন। আমি এসও তে খুব একই প্রশ্ন জিজ্ঞাসা করেছি, তবে এটি সেখানে বন্ধ বিষয় হিসাবে বন্ধ ছিল। তারপরে গণিত.স্ট্যাকেক্সচেঞ্জে জিজ্ঞাসা করা হয়েছিল, তবে একই সমাপ্তি ঘটেছে। এটি তৃতীয় স্থান, এটি সঠিক জায়গা হতে পারে, যে জানে।
টিমো কাহকেনেন

2
অ্যালগরিদম কীভাবে কাজ করে তা আমি জানি না, তবে ইনডিজাইন এটি করতে পারে: "অপটিকাল কার্নিং তাদের আকারগুলির উপর ভিত্তি করে সংলগ্ন অক্ষরগুলির মধ্যে ব্যবধানকে সামঞ্জস্য করে Some কার্নিং বা মোটেও কিছুই নয়, বা আপনি যদি একটি লাইনের এক বা একাধিক শব্দের মধ্যে দুটি ভিন্ন টাইপফেস বা আকার ব্যবহার করেন তবে আপনি অপটিক্যাল কার্নিং বিকল্পটি ব্যবহার করতে চাইতে পারেন। help.adobe.com/en_US/indesign/cs/using/…
e100

2
আমি মনে করি এটি সম্ভবত সাধারণ অ্যালগরিদম যতদূর যায় তা সুযোগের মধ্যে রয়েছে - একটি সমস্যা সমাধানের জন্য পরিচালিত পদক্ষেপগুলির একটি ধারা। তবে আমি মনে করি না যে জেএস বা অন্যান্য ভাষায় বাস্তবায়নের নির্দিষ্টকরণগুলি অন্তর্ভুক্ত, এবং কেবল জেএসকে ব্যাকগ্রাউন্ড ব্যবহারের ক্ষেত্রে উল্লেখ করার জন্য সম্পাদনা করছি।
e100

1
আমি মনে করি ব্যবসায়ের প্রথম আদেশ হ'ল "অনুকূল" এমনভাবে সংজ্ঞা দেওয়া যা কোনও মেশিন অ্যালগরিদমের জন্য দরকারী for
হোরাটিও

উত্তর:


4

আমি জানি এটি পুরানো। আমি এই মুহুর্তে ডাবলির পাঠ্য (যাই হোক না কেন) ওয়েবজিএল বাস্তবায়নে কাজ করছি। আমি যে সমাধানটি নিয়ে কাজ করছি তা এইভাবে চলে:

  1. গ্লিফ জোড়ের বিটম্যাপ করা সংস্করণ পান (বা আপনি চাইলে এটি ভেক্টরগুলির সাথে করুন)
  2. পিক্সেলের প্রতিটি সারি (অথবা আপনি যদি ভেক্টরগুলির সাথে যান তবে নির্বিচারে উল্লম্ব ইউনিট) জন্য, পরীক্ষা করুন যে উভয় গ্লাইফের কমপক্ষে একটি পিক্সেল উপস্থিত রয়েছে
  3. পদক্ষেপ 2 অতিক্রমকারী প্রতিটি সারির জন্য, প্রথম গ্লাইফের ডানদিকের পিক্সেল এবং দ্বিতীয় গ্লাইফের বামতম পিক্সেলের মধ্যে দূরত্ব গণনা করুন
  4. দ্বিতীয় গালিফটি যতদূর যেতে পারে যতক্ষণ না যেতে পারে ততক্ষণ এই মাপদণ্ডগুলি পূরণ করে:
    • পিক্সেলের সেই সারিটির ব্যবধানটি আপনি উল্লেখ করেছেন এমন কিছু ন্যূনতম ব্যবধানের চেয়ে বেশি
    • মোট ক্ষেত্রটি (গ্লিফগুলির মধ্যে একটিতে পিক্সেলবিহীন সারিগুলি উপেক্ষা করা) আপনি উল্লেখ করেছেন এমন কিছু ন্যূনতম ক্ষেত্রের চেয়ে বড়

এইভাবে, বর্ণগুলির মধ্যে ফাঁকা 'অঞ্চল' একটি খুব সাধারণ গড়ের সাথে সঙ্কুচিত হওয়া উচিত। পরীক্ষা এবং ত্রুটি এবং আপনার নিজস্ব স্বাদ ব্যবহার করে ন্যূনতম ব্যবধান এবং সর্বনিম্ন ক্ষেত্রটি নির্দিষ্ট করুন এবং ম্যানুয়াল কার্নিংয়ের মানের মতো ... এছাড়াও এই পরামিতিগুলি অন্য কোনও এজেন্ট দ্বারা সামঞ্জস্য করার অনুমতি দিন।

হ্যাঁ :)

সম্পাদনা করুন: আমি এখন এটি সফলভাবে ইমপ্লিমেন্ট করেছি এবং এটি সত্যিই ভালভাবে কাজ করে :)


চমৎকার উত্তর! জিডি.এসইতে স্বাগতম
ইয়েসেলা

স্বাগত জানাতে ধন্যবাদ: ডি !! আমার যুক্ত করা উচিত যে অঞ্চলটি প্রকৃতপক্ষে পরীক্ষিত সারিগুলির সংখ্যার দ্বারা ভাগ করা উচিত (যা আসলে এটি একটি গড় ব্যবধান করে তোলে সত্যই কোনও অঞ্চল নয়)। এবং এটির ক্ষেত্রেও যদি সারিটির ব্যবধানটি একটি পরিসংখ্যানবিদ হয় তবে এটি পরীক্ষা করা ভাল এবং সেই সারিটি যদি তা থাকে তবে তা উপেক্ষা করুন। এটি 'জি' এর মতো বড় উদ্বোধন হওয়ার সময় খুব কাছাকাছি চিঠিগুলি আটকাতে সহায়তা করবে
জয়

এখানে এবং সেখানে কয়েকটি সমস্যাযুক্ত শিশু রয়েছে বলে মনে হচ্ছে যেমন টি-বা ও 'যেমন কয়েকটি ফন্টের কিছু ফন্ট-শৈলীতে। টি- হাইফেনটিকে টি এর খুব কাছেই যেতে দাও এবং একই পাতায় কোনও পিক্সেল ভাগ করে নি, তাই যখন ঘটে তখন আমি প্রতিটি পিক্সেলের সাথে নিকটতম সারিগুলি ব্যবহার করতে ফ্যালব্যাক তৈরি করি। উপরের অ্যালগোরিদমটিকে আরও শক্তিশালী করার জন্য আপনাকে এই ধরণের সমস্যাগুলি কোনওভাবেই পরীক্ষা করতে হবে। আমার উদ্দেশ্যে, এটি প্রয়োজনীয় ছিল না।
জয়া

3

এটি মোটামুটি সহজ অ্যালগরিদম যা আমি একবার চেষ্টা করেছি এবং এটি যথেষ্ট ভালও হতে পারে।

নিম্ন রেজোলিউশনে অক্ষরগুলি রেন্ডার করুন - একই অনুভূমিকভাবে ছয় বা সাত পিক্সেল লম্বা (সাধারণ মূলধনের উচ্চতা) বলুন। আপনি একটি সরল নিম্ন-রেসিড গ্রিডে যেখানে খালি জায়গা বনাম চিঠির কিছু অংশ রয়েছে তার একটি সাধারণ বাইনারি মানচিত্র চান।

এই অক্ষরের মানচিত্র "ফ্যাটেন" " এটি হ'ল, একটি ভরাট ঘর সংলগ্ন প্রতিটি খালি ঘর পূরণ করুন। এটি অক্ষরের প্রান্তের নিকটতম খালি অঞ্চল দাবি করা, যাতে প্রতিবেশী চিঠিটি খুব কাছে যায় না।

ফলাফলযুক্ত অক্ষরের মানচিত্রের সাথে "অনুভূমিক টেট্রিস" খেলুন। বাম দিকে মাধ্যাকর্ষণ কাজ করুক। "ক" এর বাম হাতের "পেট" "টি" এর ওভারবারের নীচে গহ্বরে পড়ে যাবে। "ক" কয়টি কোষে পদক্ষেপ নিয়েছিল? অক্ষরের প্রকৃত আকারের অনুপাতে এটিকে স্কেল করুন এবং এটিই প্রকৃত উচ্চ-রেস "বাম দিকে" কতটা দূরে করতে পারবেন।


1
ধন্যবাদ! আপনার অ্যালগরিদমটি ভিজ্যুয়ালাইজ করতে আপনি "ডিবি", "এএ", "টা" এবং "সি" "আড়িয়াল ব্যবহার করে কিছু কম রেজ ইমেজ উদাহরণ সরবরাহ করতে পারেন।
টিমো কাহকেনেন

শুভ সূচনা, তবে আমি ভাবছি যে যেখানে প্রোট্রুব্র্যান্ট চরিত্রগুলির জোড়া এক সাথে "টেট্রিস" না করে যেমন, "বিডি", "টিটি", "পিকিউ", "
জিজে

@ ই 100: প্রথম নজরে সেই বিশেষ
জুটির

তবে সাধারণভাবে বলতে গেলে এগুলিকে "এমএম", "এনএন" ইত্যাদির চেয়ে আরও কড়া করা উচিত
e100

2

স্বতঃ-কার্নিংয়ের জন্য অ্যালগরিদম ইতিমধ্যে বিদ্যমান। কোনওটিই বোকা-প্রমাণ নয় এবং তাদের কিছুটা হাত ধরে রাখা এবং কিছু দিকের ম্যানুয়াল সংশোধন প্রয়োজন, বিশেষত যদি আপনার ট্র্যাকিং তুলনামূলকভাবে শক্ত হয়।

তবে এই অ্যালগোরিদমগুলি হরফ ফাইল থেকে কার্নিং প্রয়োগ করার জন্য, হরফগুলিতে হরফের ফাইল থেকে উত্পন্ন হওয়ার জন্য নয়।

আপনি কি ফন্ট ফাইলে অটো-কার্নিং প্রয়োগের কথা বিবেচনা করেছেন?

ফন্টফোর্জ (ওপেন সোর্স) এবং ফন্টল্যাব (বাণিজ্যিক) এ অটো-কার্নিং অ্যালগরিদম ধারণ করে। তাদের তুলনামূলকভাবে খাড়া শেখার বক্ররেখা থাকবে - ফন্টগুলি কীভাবে কাজ করে তার প্রযুক্তিগত দিকগুলির সাথে আপনার পরিচিত হতে হবে।

রয়েছে iKern যা লোক অফার করে একটি বাণিজ্যিক ফন্ট-কার্নিং সেবা যেখানে তিনি আপনার জন্য আপনার ফন্ট Kerns এবং একটি বরং চমৎকার পেশা আছে। আমি জানি না এটির কত দাম পড়বে।


তবে প্রশ্নটি আসলে "এই জাতীয় অ্যালগরিদম কীভাবে কাজ করবে?" - আপনি কী ফন্টফর্জের কাজ করে তার কোনও বিশদ যুক্ত করতে পারেন?
100


0

আমি পুরোপুরি এটির মাধ্যমে চিন্তা করার বা চিত্র আঁকার জন্য সময় পাইনি, তবে প্রতিটি গ্লাইফকে উল্লম্বভাবে দ্বিখণ্ডিত করার আশেপাশে আমার অর্ধ-ধারণা ছিল।

তারপরে প্রতিটি অর্ধের জন্য দুটি উল্লম্ব অক্ষটি নির্ধারণ করুন: - দ্বিখণ্ডক - ঠিক বাম এবং ডান চূড়ান্ত মাঝখানে - "ওজন" অক্ষ - প্রতিটি পাশের ঠিক অর্ধেক কালি

তারপরে দুটি অক্ষের আপেক্ষিক অবস্থানের উপর ভিত্তি করে সংলগ্ন প্রতিবেশী গ্লাইফটিকে পরীক্ষা অর্ধ-গ্লাইফের দিকে বা দূরে সরিয়ে দিন।

সুতরাং, উদাহরণস্বরূপ, "এভি" জুটিতে, এ এর ​​ডান অর্ধেক বাম-ভারী এবং "আকর্ষণ" করে ভি; ভি এর বাম অর্ধেক ডান-ভারী এটিকে "আকর্ষণ" করে, সুতরাং এগুলি একসাথে উল্লেখযোগ্যভাবে তৈরি হয়।

তবে, আমি নিশ্চিত যে "এএ" এর মধ্যে "ত্রুটি" যেমন "এভি" হিসাবে তৈরি করা হবে ত্রুটি রয়েছে।


0

উপরের কেস এবং ছোট কেস বিবেচনা করে, 56X55=2652ফন্ট-জোড়া পরিস্থিতিগুলির জন্য আপনার উদ্বেগ হওয়া উচিত, আপনি যদি ফন্টের শৈলীতে পরিবর্তন করেন তবে সমস্ত সমাধান সহজেই ভেঙে যেতে পারে কারণ, সমস্ত নিয়ম চলে যায়।

সর্বোত্তম উপায় হ'ল মেশিন লার্নিং কৌশলটি ব্যবহার করা, নিউরাল নেটওয়ার্ক স্টাডি মডেল স্থাপনের চেষ্টা করুন এবং একাধিক কর্নযুক্ত টেক্সট চিত্র বা ভেক্টর বা এর মতো জিনিসগুলি আমদানি করুন, সেই মডেলটিকে প্রশিক্ষণ দিন এবং সেই প্রশিক্ষিত মডেলটি কোনও ধরণের ফন্টকে বুদ্ধিমানের সাথে সামঞ্জস্য করতে ব্যবহার করুন।

মূলত ফন্টকে পুরোপুরি সামঞ্জস্য করার জন্য কোনও স্থির অ্যালগরিদম নেই বলে মেশিন লার্নিংয়ের ফলে এই ধরণের সমস্যার একটি ভাল সমাধান হতে পারে!


যদি না হয় কেবলমাত্র বেশিরভাগ বিষয়গত মানদণ্ড থাকে। "এই কুকুর নাকি একটি বিড়াল?", পোচটি যতই অদ্ভুত দেখাচ্ছে, তার সঠিক উত্তর এখনও নেই। (এমনকি যদি এটি যাচাই করতে
ভেট্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.