Имеется бинарный буффер jpeg:
std::vector<unsigned char> buffer;
Как из него получить аналогичный буффер, но соответствующий jpg изображению, повёрнутому на 90 градусов влево (или вправо, это несущественно)?
Поворот должен производиться не ресайзом, не обрезкой, и изменением размеров, то есть поворот изображения 100 на 200 будет изображением 200 на 100.
Если это можно легко сделать без дополнительных библиотек, было бы идеально. Возможно это решается с помощью OpenCV (но я пока не разобрался, как именно), если кто-нибудь подскажет как с ней сделать - тоже хорошо.
В вопросе упомянут угол, потому что поворот на 90 градусов это полностью обратимая операция (на уровне матриц), и возможно для такой задачи необязательно задействовать методы поворота на произвольный угол.
Это можно сделать с помощью OpenCV:
#include <opencv2/core/mat.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
std::vector<unsigned char> buffer = /* ... init of buffer*/;
cv::Mat img = cv::imdecode(buffer, cv::IMREAD_ANYDEPTH | cv::IMREAD_ANYCOLOR);
cv::rotate(img, img, cv::ROTATE_90_CLOCKWISE);
cv::imencode(".jpg", img, buffer);
Продвижение своими сайтами как стратегия роста и независимости