I have a 40 pixel font that I'm trying to translate into custom images. I'm trying to match the size of the image exactly, but I'm having some problems getting exactly the right size. Basically, what it comes down to is this. When a font says it is X pixels, what does this physically mean?
This is an excellent question, which has a rather unsatisfactory answer.
The size of type, whether specified in pixels, points (1/72") or millimetres, is the height of an em-square, an invisible box which is typically a bit larger than the distance from the tallest ascender to the lowest descender.
Given this is a somewhat arbitrary measure which
it's not very meaningful or useful, other than as an approximation.
In your case, work out what size you need to specify in Photoshop to match the browser's rendering by experimentation. You should find this to be a constant ratio for any font, but I wouldn't expect this to be the case if you change browser or OS.
ASCII Time! Pretend the two boxes below are pieces of lead type from 1900 or so. Back then, typefaces were cast in lead (or routed in wood). For the type to be set into a printing lock-up, they had to be connected to solid blocks. This is where the dimension of the type (in points) comes from:
Note the two letters above are different sizes, but their bounding box is the same. As such, in terms of points, both of those fonts are the same size.
Nowadays, we don't make much type in lead and wood and most of it is digital. However, the concept of the point sizing still exists in that there is a virtual box that is the same height for every letter that the type is placed on. Again, it's this virtual box that defines the point size rather than the physical measurements of the letterforms themselves. The actual size of the letterforms are often smaller than the point size (but can also be larger as well).
Measuring type in pixels doesn't work because of that, however, you can 'set' type in pixels in CSS and the like. The browser does a translation as best it can between the px size declared. But it's always a fuzzy estimation.
Ultimately, there's no accurate way to get two typefaces letterforms exactly the same size short of looking at them visually and changing the size of each until you see them as being the same size.
Try typing in the vertical bar character ('|') and measure that. If I duplicated your situation correctly and your antialiasing isn't blurring it too much, it should be 22px.
22px represents the height of the block of type. But each character fills the block differently. A 'g' or 'q' will occupy the lower region of that 22px, while capital letters and lowercase letters like 'b' or 'd' will occupy the upper portions.
I don't know about how to compare to your CSS settings, but that explains how Photoshop interprets text height.
The "font size" of a font refers to the font's "em height", not to the height of the actual characters in that font.
So, if you set your font size to, say, 22 pixels, then a letter in that font won't be 22 pixels tall, it'll usually be quite a bit less than that.
The "em height" of a font is actually an arbitrary choice made by the font designer these days. In old days when type consisted of metal blocks, the "em height" was the height of one of those blocks, which needed to be high enough not only for any character in that typeface but also for any ascenders, descenders, and accents.
Thus, usually the em size of a font adheres to the same basic idea - it'll be roughly set to the distance from the lowest descender or accent (such as the bottom of the letter
So, a digital type designer, having no physical limitations (it's possible for digital fonts to extend outside the em square), is free to ignore any and all conventions and pick any foundation for their em size. This means that for different fonts, setting the same font size of "22 pixels" will possibly result in different sized actual letters.
And, even if the designer does choose a certain convention, such as typographical descender-to-ascender, for their em size, this doesn't tell you the size of capital letters (cap-height) or the size of say an
Within a font family, these will usually be consistent though. So for example, Times New Roman Bold and Times New Roman Regular will have the same character sizes for the same em size, which should include ascenders, descenders, cap-height and x-height.
Are you sure your font is measured in pixels? Most of the time fonts are measured in points. A point is 1/72 of an inch. So a 40 pt font is 40/72" or 5/9" tall. The kicker is that that is the dimension from the top of the ascenders on tall letters to the bottom of the descenders on letters that hang below the baseline. That's why the x-height is sometimes used, as mentioned above. That is the height of the lower-case letters that don't stick up or down.
Either way, the measurements are never exact anyway, unfortunately. You'll just have to some measuring and figuring (and/or trial-and-error) to accomplish what you're trying.