Pomax / lib-font

This library adds a new Font() object to the JavaScript toolbox, similar to new Image() for images
MIT License
731 stars 72 forks source link

Font height gets too big when font is bigger then 250 pt #37

Closed leandrosilva closed 7 years ago

leandrosilva commented 7 years ago

Hi, guys.

I got this issue when trying to measure text with font size bigger than 250 pt.

Here is a sample...

fontSize: 235 fontMetrics.height: 172

fontSize: 240 fontMetrics.height: 176

fontSize: 245 fontMetrics.height: 180

fontSize: 250 fontMetrics.height: 183

fontSize: 255 fontMetrics.height: 1020

fontSize: 260 fontMetrics.height: 1040

fontSize: 265 fontMetrics.height: 1060

Thanks.

Pomax commented 7 years ago

okay, I had to take a moment to figure out what to write here, so: this feels fine, there are no metrics you need for 250 that you can't get by simply multiplying the metrics for 50 by 5, or for 100 by 2.5. As a professional software engineer doing full-stack web work, I am literally stumped as to why would you ever need font size 250 in a web context, where Font.js might be useful. What were you doing to run into this?

On a practical reason on why this is: Font.js builds a canvas sized roughly proportional to the font size, draws your text, then does a scanline measurement, so if your text is too big, it literally won't fit on that canvas (we can't make it too big because that'll suck up memory like nobody's business) and so the metrics are just "the dimensions of the canvas we tried to use". The jump from 183 to 1020 suggests that the font size and text chosen lead to new measurements. (the text might not fit on the canvas and so you might also run into characters falling off the canvas giving you erroneous readings).

You might want to try the (far more) modern opentype.js library, linked in the README.md

leandrosilva commented 7 years ago

Thanks for your reply, sir.

For my use case, as a professional software engineer, I know how to solve. That's fine. But as a user of an open source lib, I felt like I should share the problem that I faced in order to let other users to know, specially the main maintainers, so it might bring in a general solution for the lib, if and only if it makes any sense for the lib and its other users and main maintainers.

Trust me when I say I need to use a font size bigger than 250 pt. I am developing an advertize system that's web based but its outputs are PDF files quite big.

Again, thanks for your time and attention.

Pomax commented 7 years ago

The library is already indicated as deprecated, though, so while the idea of filing the issue is honorable, this library is not going to receive any updates: the README.md already mentions that people will want to use OpenType.js instead for modern font metrics etc. work.

Certainly for your use case (you are not creating web pages at all, you are creating PDF files by way of HTML) you don't want Font.js at all, you want the full OpenType parser instead.