Вот код
Те же проблемы, что и у афтара топа: упадет на вызове size_normalize(800000, 600000, 80, 60), хотя я не вижу объективных причин не выполнить такого преобразования размеров. И умножение перед делением (RR * $to_sx / $sx) создает ошибку переполнения в целочисленной арифметике, если передать $to_sx > 2^29 (хотя на php, возможно, это и пройдет, если он автоматом подбирает типы данных).

как Вы, Well, проверяете вручную инварианты? В программировании по контракту ведь и это есть.
Вызовы ValidateImageSize можно было заменить на Contract.Requires(size.Width > 0 && size.Height > 0, "Invalid bla-bla-bla") для входных аргументов и Contract.Ensures() для результата. Мои проверки аналогичны этому, но работают и без CC.

скажите, парни, почему вы используете арифметику с плавающей точкой для картинок, где она по сути не нужна?
В принципе - да, не особенно нужна. Только тогда надо корректно написать целочисленное умножение-деление, чтобы не возникали ошибки переполнения. Это только кажется, что все так просто, даже сложить/перемножить 2 числа - нетривиальная задача.

who | grep -i blonde | date; cd ~; unzip; touch;
strip; finger; mount; gasp; yes; uptime; umount;