अंग्रेजी वर्णमाला के किस अक्षर में सबसे अधिक पिक्सेल लगते हैं?


181

मैं एक वाक्य में वर्णों की संख्या के आधार पर कुछ गतिशील प्रोग्रामिंग करने की कोशिश कर रहा हूं। अंग्रेजी वर्णमाला का कौन-सा अक्षर स्क्रीन पर सबसे अधिक पिक्सेल लेता है?


16
सबसे अधिक पिक्सेल? व्यापक? सबसे ऊंची? कौन सा फ़ॉन्ट? क्या आप निर्दिष्ट कर सकते हैं?
ग्रेगर ब्रांट

6
क्या इसका उपयोग किए गए फ़ॉन्ट पर निर्भर नहीं करता है?
रॉबर्टो एलोई

कौन सा फ़ॉन्ट? लोअरकेस, ऊपरी?
रॉकेट रोनी

6
यह वास्तव में फ़ॉन्ट पर निर्भर करता है क्योंकि आप उस व्यक्ति से पूछ रहे हैं जो "सबसे अधिक पिक्सेल लेता है"।
गुरू

6
पारंपरिक टाइपिंग ज्ञान अपरकेस के लिए M या W है और लोअरकेस के लिए m है। फ़ॉन्ट पर निर्भर करता है, लेकिन यह ज्यादातर मामलों में काम करता है।
19

जवाबों:


724

हम्म, चलो देखते हैं:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

cccccccccccccccccccccccccccccccccccccccc

dddddddddddddddddddddddddddddddddddddddd

eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

ffffffffffffffffffffffffffffffffffffffff

gggggggggggggggggggggggggggggggggggggggg

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj

kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

llllllllllllllllllllllllllllllllllllllll

mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn

oooooooooooooooooooooooooooooooooooooooo

pppppppppppppppppppppppppppppppppppppppp

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq

rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

ssssssssssssssssssssssssssssssssssssssss

tttttttttttttttttttttttttttttttttttttttt

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG

HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH

IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ

KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO

PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP

QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ

RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS

TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT

UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

डब्ल्यू जीतता है।

बेशक, यह एक मूर्खतापूर्ण अनुभवजन्य प्रयोग है। इस बात का एक भी जवाब नहीं है कि कौन सा अक्षर सबसे चौड़ा है। यह फॉन्ट पर निर्भर करता है। तो आपको अपने पर्यावरण के उत्तर का पता लगाने के लिए एक समान अनुभवजन्य प्रयोग करना होगा। लेकिन तथ्य यह है कि अधिकांश फोंट समान सम्मेलनों का पालन करते हैं, और पूंजी डब्ल्यू सबसे व्यापक होगी।

इन वर्ण चौड़ाई के साथ एक अनुपात रूप में Wist (W = 100) इस विशेष उदाहरण फ़ॉन्ट का उपयोग करते हुए यहाँ कैप्चर किया गया:

https://gist.github.com/imaurer/d330e68e70180c985b380f25e195b90c


156
मोनोस्पेस में, हर कोई जीतता है
कॉलिन हेबर्ट

2
दिलचस्प बात यह है कि क्रोम में मेरे मैकबुक पर 'एरियल ब्लैक' में, लोअरकेस मी सबसे छोटा है।
अर्ल जेनकिन्स

15
यह कैसे ………………………………………। WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@% %%%%%%%%%%%%%%%%%%%%। % %%%%%%%%%%%%%%%%%%%%%%%%%% ……………………। ......................................... तो मुझे लगता है कि @ जीत !!
जॉन हेनकेल

19
तो डब्ल्यू वास्तव में है नहीं एम मैं नीचे एक उल्टा इन सभी वर्षों गलत किया गया है!
यूलिसिस अल्व्स

3
इस उत्तर की अजीबता के कारण बस अपवोट करें!
तनकोम

122

नेड बाथेल्डर के अजीब व्यावहारिक जवाब के आगे, क्योंकि मैं यहां अंकों के बारे में सोच रहा था:

0000000000000000000000000000000000000000

1111111111111111111111111111111111111111

2222222222222222222222222222222222222222

3333333333333333333333333333333333333333

4444444444444444444444444444444444444444

5555555555555555555555555555555555555555

6666666666666666666666666666666666666666

7777777777777777777777777777777777777777

8888888888888888888888888888888888888888

9999999999999999999999999999999999999999


7
मैंने इस जानकारी पर संदेह किया, यह सोचकर कि '1' निश्चित रूप से अन्य अंकों की तुलना में अधिक संकीर्ण होगी। लेकिन जिन फोंट में मैंने जाँच की है, सभी अंकों की चौड़ाई समान है। मुझे लगता है कि यह एक फ़ॉन्ट डिजाइन विकल्प है।
jfritz42

6
कम से कम मेरे लिए (उबंटू में फ़ायरफ़ॉक्स में इस पोस्ट को देखना), 1 दूसरों की तुलना में अधिक संकीर्ण है, और अन्य सभी समान चौड़ाई वाले हैं।
MestreLion

@MestreLion: आप किस फ़ॉन्ट का उपयोग कर रहे हैं? चेहरा, आकार और कोई भी संशोधक, जैसे बोल्डनेस या इटैलिक।
अर्ल जेनकिंस

2
@LukeTaylor - ऐसा क्यों है! font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 15px; ओह, कि Apple, हमेशा थोड़ा अलग होने की कोशिश कर रहा है ....
अर्ल जेनकींस

1
यह वास्तव में इस पर निर्भर करता है font-variant-numeric: आनुपातिक संख्याएं अलग-अलग चौड़ाई की अनुमति देती हैं, दोनों ग्लिफ़ और रिक्ति में, जबकि सारणीबद्ध अंकपत्रों को समान नियमों का पालन करना चाहिए।
मैथ्यू विलकॉकसन

20

कैसे एक प्रोग्रामेटिक समाधान के बारे में?

var capsIndex = 65;
var smallIndex = 97
var div = document.createElement('div');
div.style.float = 'left';
document.body.appendChild(div);
var highestWidth = 0;
var elem;

for(var i = capsIndex; i < capsIndex + 26; i++) {
    div.innerText = String.fromCharCode(i);
    var computedWidth = window.getComputedStyle(div, null).getPropertyValue("width");
    if(highestWidth < parseFloat(computedWidth)) {
        highestWidth = parseFloat(computedWidth);
        elem = String.fromCharCode(i);
    }
}
for(var i = smallIndex; i < smallIndex + 26; i++) {
    div.innerText = String.fromCharCode(i);
    var computedWidth = window.getComputedStyle(div, null).getPropertyValue("width");
    if(highestWidth < parseFloat(computedWidth)) {
        highestWidth = parseFloat(computedWidth);
        elem = String.fromCharCode(i);
    }
}
div.innerHTML = '<b>' + elem + '</b>' + ' won';


"M" और "W" दोनों में समान संख्या में पिक्सेल हैं। चूंकि अधिकांश उत्तर "डब्ल्यू" कहते हैं कि एम और डब्ल्यू दिखाने के लिए बेहतर है और समान हैं और जीते गए। वैसे बहुत अच्छा जवाब।
तलस्पिन_किट



5

आपके प्लेटफ़ॉर्म के आधार पर, किसी स्ट्रिंग या ड्राटक्स्ट () से किसी प्रकार की चौड़ाई वाली संपत्ति से "getWidth" करने का एक तरीका हो सकता है।

मैं एक साधारण algortime बनाऊँगा जो आवश्यक फ़ॉन्ट का उपयोग करता है और फिर alfabet के माध्यम से चलता है और इसे एक छोटे से विन्यास में संग्रहीत करता है या इसे A से Z isnt कि हार्ड से लूप के रूप में आरंभीकरण पर गणना करता है।


5

यह फॉन्ट पर भी निर्भर करता है। मैंने यह 1 या 2 साल पहले प्रसंस्करण और हेल्वेटिका के साथ किया था और यह पिक्सल बढ़ाने के क्रम में ILJTYFVCPAXUZKHSEDORGNBQMW है। विचार कैनवास पर पाठ को आकर्षित करने के लिए है जिसे आप देख रहे हैं, पिक्सेल की गणना करें, फिर हैशपॉप या शब्दकोश के साथ क्रमबद्ध करें।

बेशक, यह सीधे तौर पर आपके उपयोग से संबंधित नहीं हो सकता है क्योंकि यह केवल चौड़ाई के बजाय पिक्सेल क्षेत्र की गणना करता है। थोड़ा ओवरकिल भी हो सकता है।

void setup() { 
 size(30,30);
 HashMap hm = new HashMap();
 fill(255);
 PFont font = loadFont("Helvetica-20.vlw");
 textFont(font,20);
 textAlign(CENTER);

 for (int i=65; i<91; i++) {
    background(0);
    text(char(i),width/2,height-(textDescent()+textAscent())/2); 
    loadPixels();
    int white=0;
    for (int k=0; k<pixels.length; k++) {
       white+=red(pixels[k]);
    }
    hm.put(char(i),white);
  }

  HashMap sorted = getSortedMap(hm);

  String asciiString = new String();

  for (Iterator<Map.Entry> i = sorted.entrySet().iterator(); i.hasNext();) { 
    Map.Entry me = (Map.Entry)i.next();
    asciiString += me.getKey();
  }

  println(asciiString); //the string in ascending pixel order

}

public HashMap getSortedMap(HashMap hmap) {
  HashMap map = new LinkedHashMap();
  List mapKeys = new ArrayList(hmap.keySet());
  List mapValues = new ArrayList(hmap.values());

  TreeSet sortedSet = new TreeSet(mapValues);
  Object[] sortedArray = sortedSet.toArray();
  int size = sortedArray.length;

  // a) Ascending sort

  for (int i=0; i<size; i++) {
    map.put(mapKeys.get(mapValues.indexOf(sortedArray[i])), sortedArray[i]);
  }
  return map;
}


3

फॉक्स की चौड़ाई की गणना करने के लिए एक समाधान जैसे कि xxx द्वारा पोस्ट किए गए समाधान को एलेक्स माइकल ने अपने ब्लॉग पर पोस्ट किया था (जो कि मजेदार रूप से मुझे यहां लिंक किया गया था)।

सारांश:

  • हेल्वेटिका के लिए, शीर्ष तीन अक्षर हैं: M (2493 पिक्सेल), W (2414) और B (1909)।
  • अपने मैक के साथ भेजे जाने वाले फोंट के एक सेट के लिए, परिणाम कमोबेश समान हैं: एम (2217.51) 945.19), डब्ल्यू (2139.06 .2 945.29) और बी (1841.38 85 685.26)।

मूल पोस्ट: http://alexmic.net/letter-pixel-count/

कोड:

# -*- coding: utf-8 -*-
from __future__ import division
import os
from collections import defaultdict
from math import sqrt
from PIL import Image, ImageDraw, ImageFont


# Make a lowercase + uppercase alphabet.
alphabet = 'abcdefghijklmnopqrstuvwxyz'
alphabet += ''.join(map(str.upper, alphabet))


def draw_letter(letter, font, save=True):
    img = Image.new('RGB', (100, 100), 'white')

    draw = ImageDraw.Draw(img)
    draw.text((0,0), letter, font=font, fill='#000000')

    if save:
        img.save("imgs/{}.png".format(letter), 'PNG')

    return img


def count_black_pixels(img):
    pixels = list(img.getdata())
    return len(filter(lambda rgb: sum(rgb) == 0, pixels))


def available_fonts():
    fontdir = '/Users/alex/Desktop/English'
    for root, dirs, filenames in os.walk(fontdir):
        for name in filenames:
            path = os.path.join(root, name)
            try:
                yield ImageFont.truetype(path, 100)
            except IOError:
                pass


def letter_statistics(counts):
    for letter, counts in sorted(counts.iteritems()):
        n = len(counts)
        mean = sum(counts) / n
        sd = sqrt(sum((x - mean) ** 2 for x in counts) / n)
        yield letter, mean, sd


def main():
    counts = defaultdict(list)

    for letter in alphabet:
        for font in available_fonts():
            img = draw_letter(letter, font, save=False)
            count = count_black_pixels(img)
            counts[letter].append(count)

        for letter, mean, sd in letter_statistics(counts):
            print u"{0}: {1:.2f} ± {2:.2f}".format(letter, mean, sd)


    if __name__ == '__main__':
        main()

1

यह फ़ॉन्ट पर निर्भर करेगा। मैं एक प्रोग्रामिंग भाषा में एक छोटा सा कार्यक्रम बनाऊंगा जिसमें आप सबसे अधिक आरामदायक होंगे, जहां आप वर्णमाला के प्रत्येक अक्षर को एक बार मी बिटमैप में आकर्षित करते हैं। सफेद के साथ प्रत्येक पिक्सेल को इनिशियलाइज़ करें। प्रत्येक अक्षर को खींचने के बाद सफेद पिक्सेल की संख्या गिनें और उस नंबर को सेव करें। आपके द्वारा खोजा जा रहा सबसे अधिक संख्या है।

संपादित करें: यदि आप वास्तव में रुचि रखते हैं जिसमें कोई सबसे बड़ा आयत लेता है (लेकिन ऐसा लगता है कि आप वास्तव में उसके बाद हैं, न कि पिक्सेल), तो आप आकार खोजने के लिए विभिन्न एपीआई कॉल का उपयोग कर सकते हैं, लेकिन यह निर्भर करता है आपकी प्रोग्रामिंग भाषा उदाहरण के लिए, जावा में, आप FontMetrics क्लास का उपयोग करेंगे।


1

मुझे पता है कि यहां स्वीकृत उत्तर डब्ल्यू, डब्ल्यू विन के लिए है।

हालांकि, इस मामले में, डब्ल्यू भी चौड़ाई के लिए है। पिक्सेल का परीक्षण करने के लिए केस स्टडी का उपयोग एक सरल चौड़ाई परीक्षण में किया गया था, लेकिन यह केवल चौड़ाई थी, कुल पिक्सेल गणना नहीं। एक आसान काउंटर उदाहरण के रूप में, स्वीकृत उत्तर मानता है कि O और Q समान मात्रा में पिक्सेल लेते हैं, फिर भी वे केवल उतनी ही जगह लेते हैं।

इस प्रकार, डब्ल्यू सबसे अधिक स्थान लेता है । लेकिन, क्या यह उन सभी पिक्सल्स है, जो क्रैक हो रहे हैं?

आइए कुछ अनुभवजन्य डेटा प्राप्त करें। मैंने निम्नलिखित बी, एम और डब्ल्यू से imgur छवियां बनाईं। मैंने उनके पिक्सेल गणना का विश्लेषण किया (नीचे देखें), यहां परिणाम हैं:

बी: 114 पिक्सेल

एम: 150 पिक्सल

डब्ल्यू: 157 पिक्सेल

यहां बताया गया है कि मैंने उन्हें कैनवास में कैसे खिलाया और छवियों से कच्चे पिक्सेल डेटा का विश्लेषण किया।

var imgs = {
 B : "//i.imgur.com/YOuEPOn.png",
 M : "//i.imgur.com/Aev3ZKQ.png",
 W : "//i.imgur.com/xSUwE7w.png"
};
window.onload = function(){
  for(var key in imgs){(function(img,key){
    var Out = document.querySelector("#"+key+"Out");
    img.crossOrigin = "Anonymous";
    img.src=imgs[key];
    img.onload = function() {
      var canvas = document.querySelector('#'+key);
      (canvas.width = img.width,canvas.height = img.height);
      var context = canvas.getContext('2d');
      context.drawImage(img, 0, 0);
      var data = context.getImageData(0, 0, img.width, img.height).data;
      Out.innerHTML = "Total Pixels: " + data.length/4 + "<br>";
      var pixelObject = {};
      for(var i = 0; i < data.length; i += 4){
        var rgba = "rgba("+data[i]+","+data[i+1]+","+data[i+2]+","+data[i+3]+")";
       pixelObject[rgba] = pixelObject[rgba] ? pixelObject[rgba]+1 : 1;
      }
      Out.innerHTML += "Total Whitespace: " + pixelObject["rgba(255,255,255,255)"] + "<br>";
      Out.innerHTML += "Total Pixels In "+ key +": " + ((data.length/4)-pixelObject["rgba(255,255,255,255)"]) + "<br>";
    };
  })(new Image(),key)}
};
<table>
<tr>
  <td>
    <canvas id="B" width="100%" height="100%"></canvas>
  </td>
  <td id="BOut">
  </td>
</tr>
<tr>
  <td>
    <canvas id="M" width="100%" height="100%"></canvas>
  </td>
  <td id="MOut">
  </td>
</tr>
<tr>
  <td>
    <canvas id="W" width="100%" height="100%"></canvas>
  </td>
  <td id="WOut">
  </td>
</tr>
</table>


1

सिर्फ अनुमान लगाने से नहीं, असली सबसे लंबे ग्लिफ़ को जानना चाहते हैं ?
और मैं केवल अक्षरों, अंकों और सामान्य प्रतीकों (, @, और इसी तरह) के बारे में बात नहीं कर रहा हूं। मेरा मतलब है कि UTF-16 के सभी 32,834 वर्णों में सबसे लंबा ग्लिफ़।
इसलिए मैंने @NK द्वारा उत्तर के साथ शुरुआत की, जिसके पास एक प्रोग्रामेटिक सॉल्यूशन था, और इसके लिए कुछ मामूली संशोधन किए :

var capsIndex = 65;
var smallIndex = 97;
var div = document.createElement('div');
div.style.float = 'left';
document.body.appendChild(div);
var highestWidth = 0;
var elem;

for(var i = capsIndex; i < 32834; i++) {
    div.innerText = String.fromCharCode(i);
    var computedWidth = window.getComputedStyle(div, null).getPropertyValue("width");
    if(highestWidth < parseFloat(computedWidth)) {
        highestWidth = parseFloat(computedWidth);
        elem = String.fromCharCode(i);
    }
}
div.innerHTML = '<b>' + elem + '</b>' + ' won';

इसे चलाने और प्रतीक्षा (और प्रतीक्षा) के बाद, यह आउटपुट देता है ௌ won
और आपके पास यह है, UTF-32 में सबसे लंबा चरित्र! ध्यान दें कि कुछ फोंट पर सबसे लंबा ग्लिफ़ but है, लेकिन अन्य फोंट (विशेष रूप से मोनोस्पेस) पात्रों को ओवरलैप करते हैं, जैसा कि उस फ़ॉन्ट के साथ होता है जो प्रोग्राम प्रोग्राम खाता लेता है।


-1

यह फॉन्ट पर निर्भर करता है। उदाहरण के लिए क्रॉस्ड जीरो एक रेगुलर से ज्यादा होता है।

लेकिन अगर कोई एक अनुमान लगा सकता है, तो मैं एक्स या बी के साथ जाऊंगा।


इस सवाल का जवाब नहीं है। यह सिर्फ एक जोड़े को अनुमान देता है। जवाब, वैसे, यह way।
बेनामी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.