Если размеры изображения кратны 8 (или 16, если используется подвыбор цветности), то повороты без потерь. В противном случае невозможно повернуть изображение без повторного вычисления блоков, то есть повторного сжатия изображения, что приводит к потерям.
Причиной этого является то, что изображения в формате JPEG разбиты на серии блоков 8x8 или 16x16, которые сжимаются по отдельности. Неполные блоки допускаются только по правому и нижнему краю. Таким образом, если ваше изображение не является точным кратным 8/16, оно будет содержать неполные блоки, которые после поворота окажутся на неправильном краю.
Я подтвердил вышеупомянутое утверждение, используя версию Windows Photo Viewer, которая поставляется с Windows 7. Я использовал два изображения цветового шума. Одно изображение было 256x256, т.е. оба размера кратны 8. Другое изображение было тем же, но обрезано до 253x253, т.е. ни один размер не был кратен 8. Вот изображения:
http://www.mattgrum.com/photo_se/losslessrotation/256x256.jpg
256x256
http://www.mattgrum.com/photo_se/losslessrotation/253x253.jpg
253x253
Затем я выполнил четыре поворота против часовой стрелки, закрывая просмотрщик фотографий после каждого поворота, чтобы убедиться, что изображение было сохранено в повернутом состоянии.
http://www.mattgrum.com/photo_se/losslessrotation/256x256_rotated.jpg
256x256
http://www.mattgrum.com/photo_se/losslessrotation/253x253_rotated.jpg
253x253
Нет необходимости выполнять вычитание, чтобы увидеть разницу с 253-пиксельным изображением, оно заметно темнее и мутнее!
Разница на другом изображении выглядит следующим образом:
http://www.mattgrum.com/photo_se/losslessrotation/diff.png
т.е. изображения идентичны, повороты были без потерь.