* J M Cerqueira Esteves <jmce@artenumerica.com> [2002-01-03 19:40 +0000]:
Unfortunately, I had no time to determine the precise equation used by ImageMagick to calculate new sizes maintaining aspect ratio. Having it, you could use that instead of the calculation at _getAspectRatioSize when resizing with PIL (since PIL's `resize', unlike ImageMagick's `convert', doesn't try to maintain aspect ratio and needs to be given precise final sizes).
I have just found what ImageMagick uses, in magick/image.c, function ParseImageGeometry. If (w0, h0) are the original width and height and (wM, hM) are the maximum width and height allowed (specified with -geometry wMxhM), ImageMagick defines the final width and height as follows (in Python): scale = min (float (wM) / w0, float (hM) / h0) width = max (int (scale * w0 + 0.5), 1) height = max (int (scale * h0 + 0.5), 1) while Photo uses (with integer division, therefore with truncation everywhere): if hM > h0 * wM / w0: height = h0 * wM / w0 width = wM else: height = hM width = w0 * hM / w0