Firefox doesn't agree (didn't try anything else). The table-cell treats width and height as min-width and min-height, so it expands to fit the image. You can change the width and height to max- and min-height, and max- and min-width. But as you mentioned, smaller than optimum images will not scale up.
The same thing can be done this way without the table-cell: (IE8+)
border:5px solid magenta;
<div><img src="http://placehold.it/300x420" alt="alternate description of image"></div>
Same problem with smaller than optimum images, though.
The argument in favor of a server-side script includes optimizing the size of the image served to the user up and down, especially down.
I just don't know where to find one.