Почему UIPasteboard игнорирует ориентацию изображения, которую я использую? - PullRequest
1 голос
/ 29 января 2012

Я беру изображение с камеры и поворачиваю его в новую ориентацию, а затем вставляю в общий картон.Однако независимо от того, что я передаю в ориентацию, то, что в итоге будет вставлено позже командой pasteboard paste, будет ориентировано так, как если бы это было UIImageOrientationUp.

    CGImageRef croppedImageRef = CGImageCreateWithImageInRect([self CGImage], CGRectMake(rect.origin.y, [self size].width - rect.origin.x - rect.size.width, rect.size.height, rect.size.width));
    UIImage *croppedImage = [UIImage imageWithCGImage:croppedImageRef scale:self.scale orientation:orientation];
    CGImageRelease(croppedImageRef);
    [[UIPasteboard generalPasteboard] setImage:croppedImage];   

Я использую аналогичный код для успешного поворота изображений с камерыи вставьте их в фотоальбом:

    CGImageRef croppedImageRef = CGImageCreateWithImageInRect([self CGImage], CGRectMake(rect.origin.y, [self size].width - rect.origin.x - rect.size.width, rect.size.height, rect.size.width));
    UIImage *croppedImage = [UIImage imageWithCGImage:croppedImageRef scale:self.scale orientation:orientation];
    CGImageRelease(croppedImageRef);
    [self writeUIImageToCameraRoll:croppedImage withOrientation:orientation];

Почему я не могу повернуть изображение так, как хочу для картона?Использует ли действие вставки ориентацию EXIF?Если да, копирует ли imageWithCGImage исходный EXIF ​​в новое изображение?

1 Ответ

0 голосов
/ 12 марта 2012

Я полагаю, что монтажный картон предпочитает PNG, что приведет к удалению любых данных EXIF, прикрепленных к изображению.

NSLog( @"UIPasteboardTypeListImage: %@", UIPasteboardTypeListImage ); nets:

UIPasteboardTypeListImage: (
    "public.png",
    "public.tiff",
    "public.jpeg",
    "com.compuserve.gif"
)

Варианты обходных путей - сохранитьДанные JPEG в картон:

NSData *jpegData = UIImageJPEGRepresentation(img, 1.0);
[[UIPasteboard generalPasteboard] setData:jpegData forPasteboardType:(id)kUTTypeJPEG];
...
NSData *pbImgData = [[UIPasteboard generalPasteboard] dataForPasteboardType:(id)kUTTypeJPEG];
UIImage *pbImg = [UIImage imageWithData:pbImgData];

или сбросить ориентацию изображения после извлечения его из картона:

[[UIPasteboard generalPasteboard] setImage:img];
...
UIImage *pbImg = [[UIPasteboard generalPasteboard] image];
UIImage *correctedImage = [UIImage imageWithCGImage:[pbImg CGImage] scale:pbImg.scale orientation:__whateverOrientationDesired];
...