영어 알파벳 중 어떤 문자가 가장 많은 픽셀을 차지합니까?


181

문장의 문자 수를 기반으로 일부 동적 프로그래밍을 시도하고 있습니다. 영어 알파벳 중 어떤 문자가 화면에서 가장 많은 픽셀을 차지합니까?


16
가장 많은 픽셀? 가장 넓습니까? 가장 큰? 어떤 글꼴? 지정할 수 있습니까?
Gregor Brandt

6
사용되는 글꼴에 따라 다르지 않습니까?
Roberto Aloi

어떤 글꼴? 소문자, 대문자?
Rocket Ronnie

6
"가장 많은 픽셀을 차지하는"글꼴을 요청하기 때문에 글꼴에 따라 다릅니다.
Gurzo

6
전통적인 조판 지혜는 대문자의 경우 M 또는 W이고 소문자의 경우 m입니다. 글꼴에 따라 다르지만 대부분의 경우에 허용됩니다.
tripleee

답변:


726

흠, 보자 :

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

cccccccccccccccccccccccccccccccccccccccccc

dddddddddddddddddddddddddddddddddddddddddd

eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

ffffffffffffffffffffffffffffffffffffffffffffff

gggggggggggggggggggggggggggggggggggggggggg

ㅋㅋㅋ ㅋㅋㅋ ㅋㅋㅋ

iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj

kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

lllllllllllllllllllllllllllllllllllllllllllll

mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn

oooooooooooooooooooooooooooooooooooooooo

pppppppppppppppppppppppppppppppppppppppppppp

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq

rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

ssssssssssssssssssssssssssssssssssssssss

ttttttttttttttttttttttttttttttttttttttttttt

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG

HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH

IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ

KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO

PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP

QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ

RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS

TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT

UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

승.

물론 이것은 어리석은 실험적 실험입니다. 어떤 문자가 가장 넓은 지에 대한 답은 없습니다. 글꼴에 따라 다릅니다. 따라서 환경에 대한 해답을 찾으려면 비슷한 실험적 실험을 수행해야합니다. 그러나 사실 대부분의 글꼴은 동일한 규칙을 따르며 대문자 W가 가장 넓습니다.

이 특정 예제 글꼴을 사용하여 여기에 캡처 된 비율 형식 (W = 100)으로 이러한 문자 너비가있는 요지 :

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


156
모노 스페이스에서 모두 승리
콜린 허버트

2
흥미롭게도 Chrome의 MacBook의 'Arial Black'에서 소문자 m이 가장 작습니다.
얼 젠킨스

15
이건 어때 ........................................ WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW @@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ %%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%% ................. ......................................... 그래서 @이 이겼다고 생각합니다 !!
존 헨켈

19
그래서 W는 실제로 거꾸로 된 M이 아닙니다 . 나는 몇 년 동안 틀 렸습니다.
율리시스 Alves

3
이 답변의 위대함 때문에 단순히 찬성하십시오!
Tanckom

122

Ned Batchelder의 놀랍도록 실용적인 대답에 더해, 나는 여기에 숫자에 대해 궁금해했기 때문에 :

0000000000000000000000000000000000000000

1111111111111111111111111111111111111111

2222222222222222222222222222222222222222

3333333333333333333333333333333333333333333

4444444444444444444444444444444444444444444

5555555555555555555555555555555555555555

6666666666666666666666666666666666666666666

7777777777777777777777777777777777777777777

8888888888888888888888888888888888888888

99999999999999999999999999999999999999999999


7
나는 '1'이 다른 숫자보다 좁을 것이라고 생각 하면서이 정보를 의심했다. 그러나 내가 확인한 글꼴에서 모든 숫자의 너비는 동일합니다. 나는 그것이 글꼴 디자인 선택이라고 가정합니다.
jfritz42

6
적어도 나에게 (우분투의 Firefox 에서이 게시물을 볼 때) 1은 다른 것보다 좁고 다른 것들은 모두 같은 너비입니다.
MestreLion

@MestreLion : 어떤 글꼴을 사용하고 있습니까? 면, 크기 및 굵게 또는 기울임 꼴과 같은 수정 자
얼 젠킨스

2
@LukeTaylor-왜 그래! font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 15px; 오, 그 애플은 항상 조금 달라 지려고 노력하고 있습니다.
얼 젠킨스

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"는 모두 같은 수의 픽셀을가집니다. 대부분의 답변이 "W"라고 말하면 M과 W가 같고이기는 것이 더 좋습니다. 그건 그렇고 아주 좋은 답변입니다.
Talespin_Kit



5

플랫폼에 따라 어떻게 든 너비 속성을 사용하여 문자열 또는 DrawText () 함수에서 "getWidth"하는 방법이있을 수 있습니다.

필요한 글꼴을 활용 한 간단한 알고리즘을 만들고 알 파트를 통해 작은 구성으로 저장하거나 초기화 할 때 A에서 Z까지의 루프로 그렇게 열심히 계산하지 않았습니다.


5

또한 글꼴에 따라 다릅니다. 나는 1-2 년 전에 Processing and Helvetica를 사용하여 픽셀을 늘리는 순서대로 ILJTYFVCPAXUZKHSEDORGNBQMW입니다. 아이디어는보고있는 글꼴로 캔버스에 텍스트를 그리고 픽셀 수를 세고 HashMap 또는 Dictionary로 정렬하는 것입니다.

물론 이것은 너비가 아닌 픽셀 영역을 계산하기 때문에 사용과 직접 관련이 없을 수도 있습니다. 약간 과잉 일 수도 있습니다.

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가 게시 한 솔루션과 비슷한 글꼴 너비를 계산하는 솔루션은 Alex Michael이 자신의 블로그에 게시했습니다 (재미있게 여기에 나를 연결했습니다).

요약:

  • Helvetica의 경우 상위 3 개 문자는 M (2493 픽셀), W (2414) 및 B (1909)입니다.
  • Mac과 함께 제공된 글꼴 세트의 경우 결과는 M (2217.51 ​​± 945.19), W (2139.06 ± 945.29) 및 B (1841.38 ± 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

글꼴에 따라 다릅니다. 가장 편한 프로그래밍 언어로 작은 프로그램을 만들고 알파벳의 각 문자를 m 크기의 비트 맵으로 그립니다. 각 픽셀을 흰색으로 초기화하십시오. 그런 다음 각 문자를 그린 후 흰색 픽셀 수를 세어 해당 숫자를 저장하십시오. 가장 높은 숫자는 찾고있는 숫자입니다.

편집 : 실제로 가장 큰 사각형을 차지하는 것에 관심이 있다면 (픽셀이 아닌 실제로 그 뒤에있는 것처럼 보입니다) 다양한 API 호출을 사용하여 크기를 찾을 수 있지만 그 크기에 따라 다릅니다. 프로그래밍 언어. 예를 들어 Java에서는 FontMetrics 클래스를 사용합니다.


1

여기에 허용 된 답변이 W이고 W는 WIN이라는 것을 알고 있습니다.

그러나이 경우 W도 너비입니다. 이 사례 연구에서는 간단한 너비 테스트를 사용하여 픽셀을 검사했지만 총 픽셀 수가 아니라 너비 만 사용했습니다. 쉬운 예로써, 받아 들여진 대답은 O와 Q가 같은 양의 픽셀을 차지한다고 가정하지만 같은 양의 공간 만 차지한다고 가정합니다.

따라서 W는 가장 많은 공간을 차지합니다 . 그러나, 그것이 깨지는 모든 픽셀입니까?

경험적 데이터를 얻자. 다음 B, M 및 W에서 이미지 이미지를 만든 다음 픽셀 수를 분석했습니다 (아래 참조). 결과는 다음과 같습니다.

B : 114 픽셀

M : 150 픽셀

W : 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에서 가장 긴 문자가 있습니다! 일부 글꼴에서는 가장 긴 글리프가 ﷽이지만 다른 글꼴 (특히 모노 스페이스 글꼴)은 프로그램이 프로그램에서 사용하는 글꼴과 마찬가지로 문자와 겹칩니다.


-1

글꼴에 따라 다릅니다. 예를 들어, 교차 0은 일반 1보다 훨씬 더 많이 차지합니다.

그러나 추측을 할 수 있다면 X 또는 B로 갈 것입니다.


이것은 질문에 대답하지 않습니다. 그것은 단지 몇 가지 추측을 제공합니다. 그런데 대답은 ௌ.
익명
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.