IntegerScaling — библиотека для целочисленного масштабирования

IntegerScaling — библиотека для вычисления масштабных коэффи­циентов и размеров отмасштаби­рованного изображения для целочисленного масштаби­рования изображений с возмож­ностью коррекции соотношения сторон. Реализует авторский алгоритм масштаби­рования с результи­рующими пикселами идеально одинакового размера.

Есть версии библиотеки на языках программирования C++, Rust, JavaScript и PHP. Лицензия — MIT.

Синтаксис (API)

Библиотека доступна как объект (JavaScript), модуль (Rust) или класс (C++, PHP) IntegerScaling, у которого есть следующие методы/функции:

calculateRatio(areaWidth, areaHeight, imageWidth, imageHeight)
Вычисляет целочис­ленный масштабный коэффи­циент, одинаковый для осей X/Y (пикселы квадратные). Возвращает целое число.
calculateRatios(areaWidth, areaHeight, imageWidth, imageHeight, aspectX, aspectY)
Вычисляет целочис­ленные масштабные коэффи­циенты, потенциально различающиеся для осей X/Y в результате коррекции соотношения сторон (пикселы прямо­угольные). Возвращает структуру (C++, Rust) или объект (JavaScript, PHP) с двумя свойствами: x и y, которые содержат масштабные коэффи­циенты по горизонтали и вертикали соответственно.
calculateSize(areaWidth, areaHeight, imageWidth, imageHeight)
Вычисляет размеры (ширину и высоту) отмасштаби­рованного изображения без коррекции соотношения сторон (пикселы квадратные). Возвращает структуру (C++, Rust) или объект (JavaScript, PHP) с двумя свойствами: width и height, которые содержат ширину и высоту отмасштаби­рованного изображения соответственно.
calculateSizeCorrected(areaWidth, areaHeight, imageWidth, imageHeight, aspectX, aspectY)
Вычисляет размеры (ширину и высоту) отмасштаби­рованного изображения с коррекцией соотношения сторон (пикселы прямоугольные). Тип возвращаемого значения идентичен calculateSize().
calculateSizeCorrectedPerfectY(areaWidth, areaHeight, imageHeight, aspectX, aspectY)
Вычисляет размеры (ширину и высоту) отмасштаби­рованного изображения с коррекцией соотношения сторон с цело­численным масштабным коэффи­циентом по вертикали, но дробным масштабным коэффи­циентом по горизонтали для достижения точного соотношения сторон при цело­численном масштаби­ровании по вертикали, например, с целью равномерного распределения scanline-линий. Тип возвращаемого значения идентичен calculateSize().

Для Rust также доступен модуль integer_scaling, предназначенный для тех, кто предпочитает нотацию snake_case.

Класс (C++, PHP) определён в прост­ранстве имён MaratTanalin.

Параметры

areaWidth, areaHeight
Целые числа, представляющие собой соответственно ширину и высоту области экрана, в которую следует вписать отмасшта­бированное изображение.
imageWidth, imageHeight
Целые числа, представляющие собой соответ­ственно ширину и высоту изображения, подлежащего масштабированию.
aspectX, aspectY
Целевое соотношение сторон aspectX:aspectY в виде двух чисел с плавающей запятой, представляющих собой числитель и знаменатель соотношения сторон.