छोटी स्क्रीन के लिए 5x5 पिक्सेल फ़ॉन्ट
(maurycyz.com)- यह एक अति-छोटा fixed-width फ़ॉन्ट है जिसमें सभी अक्षर 5-पिक्सेल वर्ग के भीतर समाते हैं और उन्हें 6x6 ग्रिड में सुरक्षित रूप से ड्रॉ किया जा सकता है, इसलिए इसे छोटी स्क्रीन और सीमित मेमोरी वाले वातावरण के लिए डिज़ाइन किया गया है
- 5x5 आकार ने 4x4 में
E,M,Wको दिखाने की कमी को हल किया, और अधिकतर lowercase अक्षरों को uppercase से 1 पिक्सेल छोटा बनाकर दृश्य भिन्नता भी सुनिश्चित की - पूरा फ़ॉन्ट केवल 350 bytes का है, इसलिए यह AVR128DA28 जैसे 8-bit microcontroller के लिए उपयुक्त है, और 160x128 या 128x64 OLED जैसी छोटी स्क्रीन पर pixel efficiency बढ़ जाती है
- समान आकार में render किए गए vector font की तुलना में भी, anti-aliasing और कहीं बड़े code व font data के बावजूद नतीजा इस 350-byte हस्तनिर्मित फ़ॉन्ट से कमतर है
- इससे भी छोटे 3x5, 3x4, 3x3, 2x3, 3x2, 2x2 तक प्रयोग किए गए; 3x5 काफ़ी पढ़ने लायक है, 3x2, 2x3 से बेहतर है, लेकिन 2x2 लगभग गुप्त कोड जैसा बिखर जाता है
5x5 पिक्सेल फ़ॉन्ट
- इसे इस तरह डिज़ाइन किया गया है कि सभी अक्षर 5-पिक्सेल वर्ग के भीतर आएँ और 6x6 ग्रिड में सुरक्षित रूप से ड्रॉ किए जा सकें
- इसका आधार lcamtuf का 5x6
font-inline.hहै, और वह फ़ॉन्ट ZX Spectrum के 8x8 फ़ॉन्ट से प्रभावित है - 5x5 को readability बिगाड़े बिना न्यूनतम आकार के रूप में चुना गया
- इसका आधार lcamtuf का 5x6
- 2x2 संभव नहीं है, 3x3 तकनीकी रूप से संभव है लेकिन पढ़ना कठिन है, और 4x4
E,M,Wको ठीक से बनाने के लिए पर्याप्त नहीं है- 5x5 में यह समस्या हल हो जाती है
- 5x5 में अधिकतर lowercase अक्षरों को uppercase से 1 पिक्सेल छोटा बनाया जा सकता है, इसलिए वे दृश्य रूप से अलग पहचाने जाते हैं
- और संकरे 4x5 तथा 3x5 भी संभव हैं, लेकिन इसके लिए
M, बिंदु वाला0, औरU/V/Yकी भिन्नता की क़ुर्बानी देनी पड़ती है - सभी अक्षरों को समान चौड़ाई देने से programming आसान हो जाती है
- स्क्रीन पर string की लंबाई हमेशा अक्षरों की संख्या का 6 गुना मानी जाती है
"8978","1111"से लंबा हो जाएगा और layout overflow करेगा, इसकी चिंता नहीं करनी पड़ती
- पूरे फ़ॉन्ट का आकार केवल 350 bytes है, इसलिए यह AVR128DA28 जैसे 8-bit microcontroller के लिए उपयुक्त है
- मूल लेख में AVR128DA28 के पास RAM 16kB बताई गई है
- ऐसे chips सस्ते, low-power और मजबूत होते हैं, लेकिन graphics processing के लिए इनमें ज़्यादा गुंजाइश नहीं होती
- 384x288 display में भी लगभग 1.1 लाख pixels होते हैं, इसलिए उसे AVR मेमोरी में रखना बहुत बड़ा पड़ता है
- इसके बजाय 160x128 या 128x64 OLED जैसी छोटी स्क्रीन अधिक व्यावहारिक और सस्ती हैं
- ऐसी स्क्रीन पर हाथ से बनाया गया pixel-efficient फ़ॉन्ट ज़्यादा फ़ायदेमंद होता है
- समान आकार में render किए गए vector font की भी तुलना की गई है
- वह vector font वास्तव में 6 pixels ऊँचा है, लेकिन उसके glyph अधिक संकरे हैं
- anti-aliasing, कई megabytes code, और 1MB font data के बावजूद, नतीजा इस 350-byte हस्तनिर्मित फ़ॉन्ट से कमतर है
वास्तविक स्क्रीन और और छोटे आकार के प्रयोग
- वास्तविक pixels पूरी तरह square नहीं होते, इसलिए स्क्रीन पर दिखने वाला रूप ऊपर के rendering जैसा बिल्कुल नहीं होता
- subpixel से बनने वाला pseudo drop-shadow effect सकारात्मक माना गया है
- black-and-white display में यह प्रभाव नहीं होता, फिर भी यह उम्मीद से अधिक smooth दिखता है
- pixels के बीच की दूरी
eऔरgको अधिक विश्वसनीय दिखाती है- इसी प्रभाव के आधार पर और छोटे फ़ॉन्ट की संभावना भी आगे खोजी गई
- 3x5 बिना समझौते वाला न्यूनतम resolution नहीं है, फिर भी काफ़ी अच्छी तरह पढ़ा जा सकता है
- इस आकार में 32,768 glyphs हैं, जिनमें से 27,904 एक-दूसरे से अलग पहचाने जा सकते हैं
M,W,Qको नुकसान होता है, लेकिनOऔर0अब भी अलग पहचाने जाते हैं- जब स्क्रीन पर 50% अधिक columns चाहिए हों, तब यह एक विकल्प हो सकता है
- 3x4 में अब भी पढ़ना संभव है, लेकिन सीमाएँ बढ़ जाती हैं
- glyphs की संख्या 4,096 है, जिनमें से 3,392 एक-दूसरे से अलग पहचाने जा सकते हैं
- इस आकार में uppercase और lowercase में भेद नहीं किया जा सकता, इसलिए सीमित जगह में सबसे उपयुक्त एक ही style चुना जाता है
- अंकों की अभिव्यक्ति भी खराब हो जाती है, लेकिन यह अब भी काम चलाने लायक है
- 3x3 में अंकों का नुकसान सबसे अधिक है
- glyphs 512 हैं, जिनमें से 400 एक-दूसरे से अलग पहचाने जा सकते हैं
- अक्षर बिना दोहराव के किसी हद तक पहचाने जा सकते हैं
- वास्तविक hardware पर दिखाने पर यह फ़ॉन्ट काफ़ी बेहतर हो जाता है
- 2x3 लगभग ज़रूरत से ज़्यादा संकुचित स्तर पर पहुँच जाता है
- glyphs 64 हैं, जिनमें से 44 एक-दूसरे से अलग पहचाने जा सकते हैं
- ज़्यादातर अक्षरों को पहचानना कठिन है और दोहराव भी बहुत है
- सबसे नीचे की पंक्ति
"Hello World"है
- अनुपात उलटा करने वाला 3x2 , 2x3 से काफ़ी बेहतर निकलता है
- इस आकार में भी glyphs 64 हैं, जिनमें से 44 एक-दूसरे से अलग पहचाने जा सकते हैं
M,W,N,Q,G,Pजैसे अक्षरों कोE,Fजैसे vertical detail वाले अक्षरों की तुलना में अधिक horizontal detail चाहिए, इसलिए यह रूप अधिक फ़ायदेमंद है- सबसे नीचे की पंक्ति
"you can probably read this"है, और आँखें सिकोड़कर या छोटा करके देखने पर इसे पढ़ा जा सकता है
- 2x2 केवल completeness के लिए तुलना में रखा गया है
- संभव 2x2 images सैद्धांतिक रूप से 16 हैं, लेकिन एक खाली है और पाँच अन्य glyphs को खिसकाकर कॉपी किए हुए रूप हैं, इसलिए व्यवहार में केवल 10 बचते हैं
- यह पूरे अंकों को दिखाने जितना तो सक्षम है, लेकिन मूल आकार से इतना दूर है कि फ़ॉन्ट कम और गुप्त कोड ज़्यादा लगता है
3 टिप्पणियां
अच्छी जानकारी के लिए धन्यवाद। अब इसे तुरंत आज़माने का मन कर रहा है।
यहाँ पर Hangul को कैसे ठूँसें TT ppyaek
Hacker News टिप्पणियाँ
अगर subpixel rendering का उपयोग करें, तो 1x5 भी काफ़ी हो सकता है https://www.msarnoff.org/millitext/
[2x5-HP-Z24n-G2] https://i.imgur.com/yLyrpfg.jpeg
[1x5-HP-Z24n-G2] https://i.imgur.com/Z7kH005.jpeg
[2x5-Innolux-N156HCA-GA3] https://i.imgur.com/F4Ypxwj.jpeg
[1x5-Innolux-N156HCA-GA3] https://i.imgur.com/etkot5o.jpeg
[1] https://jp.ext.hp.com/monitors/business/z_z24n_g2/
[2] https://www.panelook.com/N156HCA-GA3__15.6__overview_33518.html
और इसी के साथ यह भी पता चला कि मेरी स्क्रीन कितनी गंदी है
5x5 काफ़ी अच्छा है और 3x5 भी बुरा नहीं, लेकिन दोनों में पूरा ASCII सेट नहीं आ पाता
असली आकार को लेकर थोड़ा भ्रम भी होता है, क्योंकि character spacing जोड़ें तो व्यवहार में 6x6 या 4x6 grid की ज़रूरत पड़ती है
इसलिए मुझे https://github.com/fcambus/spleen का Spleen काफ़ी पसंद है
इसमें पूरा ASCII support करने वाला 5x8 font है, और ज़्यादातर glyphs असल में horizontal spacing सहित 4x8 जैसे हैं
अपने प्रोजेक्ट में मैंने इसे बदलकर सभी glyphs को 4x8 पर फिट किया, और नतीजे में 5x9 grid पर हर अक्षर के बीच horizontal और vertical 1-pixel spacing हमेशा रखते हुए भी इसे अच्छा render कर पाया
अगर hardware से हल चाहिए होता, तो 80 column card खरीदकर proper 80-column text इस्तेमाल किया जा सकता था, बस monitor को उसे support करना होता था
ज़्यादातर अत्यंत छोटे fonts 1:1 scale पर बस सरसरी तौर पर पढ़ने के लिए भी वाकई बहुत ख़राब होते हैं
मैंने पहले game mode बनाते समय बहुत छोटे और घने fonts की ज़रूरत में 3x3, 3x5, यहाँ तक कि 2x5 भी काफ़ी इस्तेमाल किए, लेकिन वे सब पढ़ने में बहुत मुश्किल थे
आख़िर में मुझे zephram का Gremlin-3x6 मिला, जो ऊँचाई में 1 pixel ज़्यादा होने के बावजूद horizontal रूप से अब भी बहुत compact था
सबसे अहम बात यह थी कि standard Latin characters अच्छी तरह अलग-अलग पहचाने जा सकते थे, और ज़्यादा zoom किए बिना भी पढ़े जा सकते थे
अफ़सोस है कि zephram ने अपना FontStruct account हटा दिया, तो font भी सब गायब हो गए, लेकिन मैंने अपने mod repository में उनकी copy और CC0 license बचाकर रखी है, और असली rendering screenshot में देखी जा सकती है
[0] - https://fontstruct.com/fontstructions/show/1488093
[1] - https://codeberg.org/janAkali/isaac-extended-icons-mod/src/branch/master/assets/fonts
[2] - https://codeberg.org/janAkali/isaac-extended-icons-mod/media/branch/master/assets/screenshots/screenshot.png
CJK characters के बारे में भी ऐसी ही चर्चा हुई थी
https://chinese.stackexchange.com/questions/16669/lowest-pixel-resolution-needed-to-support-chinese
अगर लेखक यह देख रहा हो, तो lowercase t में horizontal stroke के ऊपर एक pixel और जोड़ना बेहतर होगा
अभी इसका रूप uppercase T से बहुत मिलता-जुलता लगता है
फिर भी कुल मिलाकर यह बहुत अच्छी तरह बनाया गया है, और इसे साझा करने के लिए धन्यवाद
x
xxx
x
xx
xx
x
x
x
xx
कहा गया कि 4x4 में E, M, W को ठीक से बनाना मुश्किल है, लेकिन असल में 5x5 भी e को ठीक से बनाने के लिए काफ़ी नहीं है
अगर आप lowercase को uppercase से नीचा रखना चाहते हैं, तो vertical pixels कम से कम 6 चाहिए, और descenders को ठीक से दिखाने के लिए कम से कम 7 होने चाहिए
सख्ती से कहें तो g और y को baseline पर रखते हुए भी horizontal descenders अलग दिखाने हों, तो 8 बेहतर है, लेकिन यहाँ समझौता संभव लगता है
और व्यवहार में, अक्षरों के नीचे और बगल में साफ़ दिखाई देने वाली spacing रखने के लिए आख़िरकार प्रति character कम से कम 8x6 pixels चाहिए
मेरी नज़र में ऊपर की खाली जगह कुछ हद तक भर जाती है, इसलिए वह पढ़ा जा सकता है, और लंबे वाक्य में context से उसे आसानी से समझा जा सकेगा
बेशक यह परफ़ेक्ट नहीं है, और ऊपर दिए गए बड़े, साफ़ pixel example में इसकी अटपटी बनावट ज़्यादा साफ़ दिखती है
pixels को सिर्फ on/off की दो अवस्थाओं में रखने के बजाय अगर multi-level grayscale इस्तेमाल करें, तो और छोटे आकार में भी पढ़े जा सकने वाले text बनाए जा सकते हैं
लेकिन यहाँ अहम बात letters नहीं बल्कि text है
एक-एक अक्षर बहुत धुंधला हो सकता है, फिर भी इंसान context से अनुमान लगाकर पढ़ लेता है
यहाँ तक कि इस तरीके के लिए खास तौर पर डिज़ाइन किया गया font भी ज़रूरी नहीं है
उदाहरण: https://imgur.com/a/text-80-characters-per-line-240-pixels-wide-AlYrnSS
यहाँ character spacing सहित भी प्रति character औसत चौड़ाई सिर्फ़ 3 pixels के आसपास है
LINC minicomputer के operating system LAP6 में 4x5 font शामिल था, लेकिन उसमें lowercase नहीं थे
इससे मुझे पुराने C64 पर software के ज़रिए 80 columns लागू करने की कोशिश याद आती है
इसमें 3x7 pixel grid का उपयोग होता था, लेकिन एक row और एक column spacing के लिए छोड़ दी जाती थी, और कुछ commercial products में यह वास्तव में इस्तेमाल भी हुआ था
https://www.pagetable.com/?p=901
4×8 character set को readable और अच्छा दिखने वाला बनाना आसान नहीं है, और अक्षरों के बीच 1-pixel spacing चाहिए होती है, इसलिए व्यवहार में character width सिर्फ़ 3 pixels रह जाती है
इसी वजह से M या N जैसे अक्षर ख़ास तौर पर मुश्किल हो जाते हैं
कहा गया कि अगर M, dotted zero को छोड़ दें और U/V/Y का फर्क़ भी कमज़ोर कर दें तो 4x5 या 3x5 संभव है, लेकिन मेरे हिसाब से 3x5 भी काफ़ी व्यावहारिक है
https://robey.lag.net/2010/01/23/tiny-monospace-font.html