//惨痛经历,,,

- (void)saveToAlbumWithImage:(UIImage*)image

             completionBlock:(void (^)(NSURL *assetURL))completionBlock

                failureBlock:(void (^)(NSError *error))failureBlock

{

    NSData* pngData =  UIImagePNGRepresentation(image);

    

    CGImageSourceRef source = CGImageSourceCreateWithData((__bridge_retained CFDataRef)pngData, NULL);

 

    NSDictionary *metadata = (__bridge NSDictionary *)(CGImageSourceCopyPropertiesAtIndex(source, 0, NULL));

    

    NSMutableDictionary *metadataAsMutable = [[NSMutableDictionary dictionaryWithDictionary:metadata] mutableCopy];

    

    //For EXIF Dictionary

    NSMutableDictionary *EXIFDictionary = [[metadataAsMutable objectForKey:(NSString *)kCGImagePropertyExifDictionary]mutableCopy];

    if(!EXIFDictionary)

        EXIFDictionary = [NSMutableDictionary dictionary];

    

    [EXIFDictionary setObject:@"200x300-1....." forKey:(NSString*)kCGImagePropertyExifUserComment];

    

    //add our modified EXIF data back into the image’s metadata

    [metadataAsMutable setObject:EXIFDictionary forKey:(NSString *)kCGImagePropertyExifDictionary];

    

    CFStringRef UTI = CGImageSourceGetType(source);

    

    NSMutableData *dest_data = [NSMutableData data];

    CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)dest_data, UTI, 1, NULL);

    

    if(destination)

    {

        CGImageDestinationAddImageFromSource(destination, source, 0, (__bridge CFDictionaryRef) metadataAsMutable);

        BOOL success = CGImageDestinationFinalize(destination);

        if(success)

        {

            //            CIImage *testImage = [CIImage imageWithData:dest_data];

            //

            //            NSDictionary *propDict = [testImage properties];//////////............由此应可知以上无误,,,,,,,

            //

            //            UIImage *newImage = [UIImage imageWithData:dest_data];

            //            NSData* pngData1 =  UIImagePNGRepresentation(newImage);

            //

            //            CGImageSourceRef source1 = CGImageSourceCreateWithData((CFDataRef)pngData1, NULL);

            //            NSDictionary *metadata1 = (__bridge NSDictionary *)(CGImageSourceCopyPropertiesAtIndex(source1, 0, NULL));

            //

            NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];

            NSString *appName = [infoDictionary objectForKey:@"CFBundleDisplayName"];

            ALAssetsLibrary *assets1Library = [[ALAssetsLibrary alloc] init];

////////metadataAsMutable.............定位到问题,,,,,,,

//////............衡量标准,,,,,,,,,,,,,.......

            [assets1Library saveImage:image.CGImage metadata:metadataAsMutable toAlbum:appName completion:^(NSURL *assetURL, NSError *error) {//////...........苹果的角度..,,,,,,,,

                completionBlock(assetURL);

                if(destination)

                    CFRelease(destination);

                CFRelease(source);

            } failure:failureBlock];

        }

    }

}

 

注:

1.从两个点 抓取与之相关的所有信息汇总,,(细节,例:CIImage)

2.分析判断,,(以什么标准,例:第三方查看exif)

3.定位,,(提升高度来看,切换角度来看,,应该什么样,应该怎么做,,,例:苹果角度)

4.解决问题,,抽象问题,,(问题的背后是什么,追溯其本质)