2013-12-23 44 views
0

在我的iOS应用程序中,我必须对UIImage进行一些修改,例如在其上添加水印。之后,我想用原始元数据保存图像,但如果我尝试使用writeImageDataToSavedPhotosAlbum:metadata:completionBlock:,则在生成的图像中没有任何内容。如何保存与原始元数据的修改后的UIImage?

由于我必须修改图像,所以我必须通过NSData对于metadata:部分使用以下方法:UIImageJPEGRepresentation(UIImage *, float)

,右保存图像之前,元数据是这样的:

Meta: { 
    ApertureValue = "2.526068811667587"; 
    BrightnessValue = "-1.807443054797895"; 
    ExposureMode = 0; 
    ExposureProgram = 2; 
    ExposureTime = "0.05882352941176471"; 
    FNumber = "2.4"; 
    Flash = 16; 
    FocalLenIn35mmFilm = 33; 
    FocalLength = "4.12"; 
    ISOSpeedRatings =  (
     800 
    ); 
    LensMake = Apple; 
    LensModel = "iPhone 5c back camera 4.12mm f/2.4"; 
     LensSpecification =  (
     "4.12", 
     "4.12", 
     "2.4", 
     "2.4" 
    ); 
    MeteringMode = 3; 
    PixelXDimension = 3264; 
    PixelYDimension = 2448; 
    SceneType = 1; 
    SensingMethod = 2; 
    ShutterSpeedValue = "4.058917734171294"; 
    WhiteBalance = 0; 
    "{GPS}" =  { 
     Altitude = "147.9932"; 
     DOP = "76.42908"; 
     Latitude = "45.7398"; 
     LatitudeRef = N; 
     Longitude = "126.6266"; 
     LongitudeRef = E; 
     TimeStamp = "2013:12:23 08:45:30"; 
    }; 

那么,什么是错在这里?

+0

你得到任何异常?任何控制台日志输出?写入图像的实际代码是否被执行? – ColinE

+0

不,没有任何例外.. –

回答

0

试试这个,

UIImage *newImage = self.yourOriginalImage; 

UIImage *anotherImage = @"waterMark.png"; 
CGImageRef imageRef = anotherImage.CGImage; 

CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(imageRef), 
             CGImageGetHeight(imageRef), 
             CGImageGetBitsPerComponent(imageRef), 
             CGImageGetBitsPerPixel(imageRef), 
             CGImageGetBytesPerRow(imageRef), 
             CGImageGetDataProvider(imageRef), NULL, false); 

CGImageRef maskedImage = CGImageCreateWithMask([newImage CGImage], mask); 
self.imageView.image = [UIImage imageWithCGImage: maskedImage]; 
+0

嗯,我没有完全得到它..这段代码似乎在imageView上显示图像,但我需要的是将图像保存到图像文件中。 –

0

假设你有一个名为myEditedImage的UIImage和一个NSDictionary的元数据(或一个NSMutableDictionary ...)称为 “元数据”:

ALAssetsLibrary *library; 
ALAssetsLibraryWriteImageCompletionBlock completionBlock = ^(NSURL *assetURL, NSError *error) {}; 
float compressionLevel = 0.75; // Or whatever you want 
NSData *dataIn = UIImageJPEGRepresentation(myEditedImage, compressionLevel); 
[library writeImageDataToSavedPhotosAlbum: dataIn 
    metadata: metadata 
    completionBlock:completionBlock];