ตัวอักษรภาษาอังกฤษตัวใดที่ใช้พิกเซลมากที่สุด?


181

ฉันกำลังพยายามเขียนโปรแกรมแบบไดนามิกตามจำนวนตัวอักษรในประโยค ตัวอักษรภาษาอังกฤษตัวใดที่ใช้พิกเซลมากที่สุดบนหน้าจอ


16
พิกเซลมากที่สุดในทั้งหมด? กว้างที่สุด? ที่สูงที่สุด? แบบอักษรใด คุณสามารถระบุได้หรือไม่
Gregor Brandt

6
นั่นไม่ได้ขึ้นอยู่กับแบบอักษรที่ใช้ใช่ไหม
Roberto Aloi

แบบอักษรใด ตัวพิมพ์เล็กบน
Rocket Ronnie

6
ขึ้นอยู่กับแบบอักษรจริง ๆ เนื่องจากคุณขอแบบที่ "ใช้พิกเซลมากที่สุด"
Gurzo

6
ภูมิปัญญาเรียงพิมพ์แบบดั้งเดิมคือ M หรือ W สำหรับตัวพิมพ์ใหญ่และ m สำหรับตัวพิมพ์เล็ก ขึ้นอยู่กับฟอนต์ แต่สามารถใช้ได้ในกรณีส่วนใหญ่
tripleee

คำตอบ:


726

อืมมาดูกัน:

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

ชนะ W

แน่นอนว่านี่เป็นการทดลองเชิงประจบประแจง ไม่มีคำตอบเดียวสำหรับจดหมายที่กว้างที่สุด มันขึ้นอยู่กับตัวอักษร ดังนั้นคุณจะต้องทำการทดลองเชิงประจักษ์ที่คล้ายกันเพื่อหาคำตอบสำหรับสภาพแวดล้อมของคุณ แต่ความจริงก็คือฟอนต์ส่วนใหญ่ปฏิบัติตามอนุสัญญาเดียวกันและทุน W จะกว้างที่สุด

สรุปส่วนที่มีความกว้างอักขระในรูปแบบอัตราส่วน (W = 100) ที่นี่โดยใช้แบบอักษรตัวอย่างนี้:

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


156
ในการบินอวกาศทุกคนชนะ
Colin Hebert

2
ที่น่าสนใจใน 'Arial Black' บน MacBook ใน Chrome ของฉันตัวพิมพ์เล็ก m นั้นกว้างที่สุดโดยมีระยะขอบเล็กน้อย
Earl Jenkins

15
วิธีการเกี่ยวกับเรื่องนี้ ......................................... @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00%%%%%%%%%%%. %%%%%%%%%%%%%%%%%%%%%%%%% .......................... ......................................... ดังนั้นฉันคิดว่า @ ชนะ !!
John Henckel

19
ดังนั้นจริง ๆ แล้ว W ไม่ใช่การคว่ำลง M. ฉันผิดไปหลายปีแล้ว!
Ulysses Alves

3
โหวตขึ้นเพราะความสุดยอดของคำตอบนี้!
Tanckom

122

เพิ่มเติมจากคำตอบที่ใช้งานได้จริงของ Ned Batchelder เพราะฉันมาที่นี่ด้วยความสงสัยเกี่ยวกับตัวเลข:

0000000000000000000000000000000000000000

1111111111111111111111111111111111111111

2222222222222222222222222222222222222222

3333333333333333333333333333333333333333

4444444444444444444444444444444444444444

5555555555555555555555555555555555555555

6666666666666666666666666666666666666666

7777777777777777777777777777777777777777

8888888888888888888888888888888888888888

9999999999999999999999999999999999999999


7
ฉันสงสัยข้อมูลนี้คิดว่า '1' จะแคบกว่าตัวเลขอื่น ๆ แน่นอน แต่ในฟอนต์ที่ฉันตรวจสอบแล้วตัวเลขทั้งหมดมีความกว้างเท่ากัน ฉันคิดว่านั่นเป็นตัวเลือกการออกแบบตัวอักษร
jfritz42

6
อย่างน้อยสำหรับฉัน (ดูโพสต์นี้ใน Firefox ใน Ubuntu) 1 แคบกว่าคนอื่น ๆ และคนอื่น ๆ ก็กว้างเหมือนกันทั้งหมด
MestreLion

@MestreLion: คุณใช้แบบอักษรใดอยู่ ใบหน้าขนาดและตัวดัดแปลงใด ๆ เช่นความกล้าหาญหรือตัวเอียง
Earl Jenkins

2
@LukeTaylor - ทำไมเป็นเช่นนั้น! font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 15px; โอ้ Apple นั้นพยายามที่จะแตกต่างออกไปเล็กน้อย ....
Earl Jenkins

1
สิ่งนี้ขึ้นอยู่กับfont-variant-numeric: ตัวเลขที่เป็นสัดส่วนอนุญาตให้มีความกว้างต่างกันทั้งในสัญลักษณ์และระยะห่าง
Matthew Willcockson

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

ขึ้นอยู่กับแพลตฟอร์มของคุณอาจมีวิธี "getWidth" จากสตริงหรือฟังก์ชัน DrawText () ด้วยคุณสมบัติความกว้าง

ฉันจะทำ algortime ง่าย ๆ ที่ใช้ตัวอักษรที่ต้องการแล้ววิ่งผ่าน alfabet และเก็บไว้ใน config ขนาดเล็กหรือเพียงคำนวณมันในการเริ่มต้นเป็นห่วงจาก A ถึง Z ไม่ยาก


5

นอกจากนี้ยังขึ้นอยู่กับแบบอักษร ฉันทำสิ่งนี้เมื่อ 1 หรือ 2 ปีก่อนด้วยการประมวลผลและ Helvetica และเป็น ILJTYFVCPAXUZKHSEDORGNBQMW ตามลำดับของพิกเซลที่เพิ่มขึ้น แนวคิดคือการวาดข้อความบนผืนผ้าใบด้วยแบบอักษรที่คุณดูนับจำนวนพิกเซลจากนั้นเรียงลำดับด้วย HashMap หรือพจนานุกรม

แน่นอนว่าสิ่งนี้อาจไม่เกี่ยวข้องโดยตรงกับการใช้งานของคุณเนื่องจากจะคำนวณพื้นที่พิกเซลมากกว่าความกว้าง อาจจะเกินความจำเป็นเล็กน้อยเช่นกัน

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 ตัวอักษรสามอันดับแรกคือ: 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

มันจะขึ้นอยู่กับตัวอักษร ฉันจะสร้างโปรแกรมขนาดเล็กในภาษาการเขียนโปรแกรมที่คุณรู้สึกสะดวกสบายที่สุดโดยที่คุณวาดตัวอักษรแต่ละตัวเป็นบิตแมปขนาดเท่าตัว เริ่มต้นแต่ละพิกเซลด้วยสีขาว จากนั้นนับจำนวนพิกเซลสีขาวหลังจากคุณวาดตัวอักษรแต่ละตัวแล้วบันทึกหมายเลขนั้น จำนวนสูงสุดที่คุณค้นหาคือหมายเลขที่คุณต้องการ

แก้ไข: หากคุณสนใจที่จะใช้สี่เหลี่ยมที่มีขนาดใหญ่ที่สุด (แต่ดูเหมือนว่าหลังจากนั้นไม่ใช่พิกเซล) คุณสามารถใช้การเรียก API ต่าง ๆ เพื่อหาขนาด แต่ขึ้นอยู่กับ ภาษาโปรแกรมของคุณ ตัวอย่างเช่นใน Java คุณจะใช้คลาส FontMetrics


1

ฉันรู้ว่าคำตอบที่ยอมรับได้คือ W, W สำหรับการชนะ

อย่างไรก็ตามในกรณีนี้ W ใช้สำหรับความกว้างด้วย กรณีศึกษาใช้การทดสอบความกว้างอย่างง่ายเพื่อตรวจสอบพิกเซล แต่เป็นเพียงความกว้างไม่ใช่จำนวนพิกเซลทั้งหมด เป็นตัวอย่างที่เคาน์เตอร์ง่ายคำตอบที่ยอมรับถือว่า O และ Q ใช้จำนวนพิกเซลเท่ากัน แต่ก็ใช้พื้นที่ในปริมาณเท่ากันเท่านั้น

ดังนั้น W จะขึ้นมากที่สุดในพื้นที่ แต่มันคือจำนวนพิกเซลทั้งหมดที่มันแตกหรือเปล่า

มารับข้อมูลเชิงประจักษ์กัน ฉันสร้างภาพ imgur จาก 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

ต้องการทราบสัญลักษณ์ที่ยาวที่สุดจริงๆ ไม่ใช่แค่เดาใช่ไหม
และฉันไม่เพียง แต่พูดถึงตัวอักษรตัวเลขและสัญลักษณ์ทั่วไป (!, @ และอื่น ๆ ) ฉันหมายถึง glyph ที่ยาวที่สุดใน 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! โปรดทราบว่าในฟอนต์บางตัวอักษรที่ยาวที่สุดคือ﷽ แต่ฟอนต์อื่น ๆ (โดยเฉพาะอย่างยิ่ง monospace) จะทับซ้อนอักขระเช่นเดียวกับฟอนต์ที่โปรแกรมใช้บัญชีโปรแกรม


-1

มันขึ้นอยู่กับตัวอักษร ตัวอย่างเช่นการข้ามศูนย์นั้นใช้เวลามากกว่าศูนย์ปกติ

แต่ถ้ามีใครเดาได้ฉันจะไปกับ X หรือ B


นี่ไม่ได้ตอบคำถาม มันเพียงแค่ให้คู่เดา คำตอบโดยวิธีการมัน ௌ
ไม่ระบุชื่อ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.