Это еще не было упомянуто, поэтому я укажу, что OpenCV имеет функции для масштабирования и вращения изображений, а также огромное количество других утилит.
Он может содержать множество функций, которые не относятся к данному вопросу, но его очень легко настроить и использовать для библиотеки такого рода.
Вы можете попытаться реализовать подобные преобразования вручную, но простой подход к масштабированию и повороту обычно приводит к значительной потере деталей.
Используя OpenCV, масштабирование можно сделать так:
float scaleFactor = 0.68f;
cv::Mat original = cv::imread(path);
cv::Mat scaled;
cv::resize(original, scaled, cv::Size(0, 0), scaleFactor, scaleFactor, cv::INTER_LANCZOS4);
cv::imwrite("new_image.jpg", scaled);
Это уменьшает масштаб изображения в 0,68 раза, используя интерполяцию Ланцоша.
Я не так хорошо знаком с ротациями, но вот часть примера из одного из руководств на сайте OpenCV, который я отредактировал до соответствующих частей. (Оригинал имел перекос и перевод в нем также ...)
/// Compute a rotation matrix with respect to the center of the image
Point center = Point(original.size().width / 2, original.size().height / 2);
double angle = -50.0;
double scale = 0.6;
/// Get the rotation matrix with the specifications above
Mat rot_mat( 2, 3, CV_32FC1 );
rot_mat = getRotationMatrix2D(center, angle, scale);
/// Rotate the image
Mat rotated_image;
warpAffine(src, rotated_image, rot_mat, src.size());
Сайт OpenCV
У них тоже есть очень хорошая документация.