coverage icon indicating copy to clipboard operation
coverage copied to clipboard

Weight of font should weight glyphs by their width

Open behdad opened this issue 8 years ago • 6 comments

As discussed in Berlin, the current formula:

coverage of one font in one language = sum of (gray level of a glyph) * (normalized glyph frequency)

is not correct. You also need to multiply by normalized glyph width. Ie:

coverage of one font in one language =
  sum of (gray level of a glyph) * (width of glyph) * (normalized glyph frequency)
  divided by
  sum of (width of glyph) * (normalized glyph frequency)

Does that make sense?

behdad avatar Apr 14 '17 03:04 behdad

I wasn't in Berlin, why is width important?

GitBruno avatar May 01 '17 07:05 GitBruno

Personally Im only interested in the x-height region. So it would be cool if you could only target that area.

GitBruno avatar May 01 '17 07:05 GitBruno

OK maybe I understand what you mean; Do you want to measure the weight distribution? In that case it is easier to measure/compare stem widths.

GitBruno avatar May 01 '17 11:05 GitBruno

Only measuring stem widths is definitely easier and there are tools that already do that. But just measuring stems ignores important features like the white space in counters, or the weight carried in the curves, or the influence of the margins. Hence this exercise.

LettError avatar May 03 '17 10:05 LettError

@behdad You wrote:

coverage of one font in one language =
  sum of (gray level of a glyph) * (width of glyph) * (normalized glyph frequency)
  divided by
  sum of (width of glyph) * (normalized glyph frequency)

isn't that just sum of (gray level of a glyph) then? a == (a * b) / b

LettError avatar May 03 '17 10:05 LettError

isn't that just sum of (gray level of a glyph) then? a == (a * b) / b

No. Maybe I should have used more brackets.

sum(a_i * b_i) / sum(b_i) != sum(a_i)

the division is normalization. Ie. you can rewrite as:

sum(a_i * b_i/sum(b_j))

behdad avatar May 03 '17 19:05 behdad