1

我正在从相机中拍摄图像,并将其旋转到新方向,然后将其粘贴到普通粘贴板上。但是,无论我将什么传递给方向,最终通过粘贴板粘贴命令粘贴的内容都会像 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 复制到新图像?

4

1 回答 1

0

我相信粘贴板更喜欢 PNG,它会删除附加到图像的任何 EXIF 数据。

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

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];
于 2012-03-12T16:08:25.000 回答