CGImageSourceCreateWithURL总是返回nil

时间:2016-03-04 10:54:24

标签: objective-c nsurl cgimagesource

CGImageSourceCreateWithURL总是为零。我正在传递[NSURL fileURLWithPath:getImagePath]。我仔细检查图像是否存在我正在通过的网址。请找到下面的代码。

NSURL *imageURL = [self getImageAtTime:i withTitle:@"gifImage"];

if (!imageURL) {
    NSLog(@"imageURL is null");
    return;
}

CGImageSourceRef source = CGImageSourceCreateWithURL((__bridge CFURLRef)imageURL, NULL);

if (source == NULL) {
    NSLog(@"Source is NULL");
}

CGImageDestinationAddImageFromSource(destination, source, i+1, (__bridge CFDictionaryRef)frameProperties);

1 个答案:

答案 0 :(得分:0)

创建CGImageSourceRef source = CGImageSourceCreateWithURL((__bridge CFURLRef)imageURL, NULL);时我忘了指定图像的属性。以下是CGImageSourceCreateWithURL

的以下工作代码
            NSURL *imageURL = [self getImageAtTime:i withTitle:@"gifImage"];

            if (!imageURL) {
                NSLog(@"imageURL is null");
                return;
            }

            CGImageSourceRef source = CGImageSourceCreateWithURL((__bridge CFURLRef)imageURL, NULL);

            if (source == NULL) {
                NSLog(@"Source is NULL");
            }

            //get all the metadata in the image
            NSDictionary *metadata = (__bridge NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source, 0, NULL);

            //make the metadata dictionary mutable so we can add properties to it
            NSMutableDictionary *metadataAsMutable = [metadata mutableCopy];

            NSMutableDictionary *EXIFDictionary = [[metadataAsMutable objectForKey:(NSString *)kCGImagePropertyExifDictionary]mutableCopy];
            NSMutableDictionary *GPSDictionary = [[metadataAsMutable objectForKey:(NSString *)kCGImagePropertyGPSDictionary]mutableCopy];
            NSMutableDictionary *RAWDictionary = [[metadataAsMutable objectForKey:(NSString *)kCGImagePropertyRawDictionary]mutableCopy];
            NSMutableDictionary *GIFDictionary = [[metadataAsMutable objectForKey:(NSString *)kCGImagePropertyGIFDictionary]mutableCopy];

            if(!EXIFDictionary)
                EXIFDictionary = [[NSMutableDictionary dictionary] init];

            if(!GPSDictionary)
                GPSDictionary = [[NSMutableDictionary dictionary] init];

            if(!RAWDictionary)
                RAWDictionary = [[NSMutableDictionary dictionary] init];

            if(!GIFDictionary)
                GIFDictionary = [[NSMutableDictionary dictionary] init];


            [GPSDictionary setObject:@"camera coord Latitude"
                              forKey:(NSString*)kCGImagePropertyGPSLatitude];
            [GPSDictionary setObject:@"camera coord Longitude"
                              forKey:(NSString*)kCGImagePropertyGPSLongitude];
            [GPSDictionary setObject:@"camera GPS Date Stamp"
                              forKey:(NSString*)kCGImagePropertyGPSDateStamp];
            [GPSDictionary setObject:@"camera direction (heading) in degrees"
                              forKey:(NSString*)kCGImagePropertyGPSImgDirection];

            [GPSDictionary setObject:@"subject coord Latitude"
                              forKey:(NSString*)kCGImagePropertyGPSDestLatitude];
            [GPSDictionary setObject:@"subject coord Longitude"
                              forKey:(NSString*)kCGImagePropertyGPSDestLongitude];

            [EXIFDictionary setObject:@"[S.D.] kCGImagePropertyExifUserComment"
                               forKey:(NSString *)kCGImagePropertyExifUserComment];

            [EXIFDictionary setValue:@"69 m" forKey:(NSString *)kCGImagePropertyExifSubjectDistance];

            [GIFDictionary setObject:[NSNumber numberWithFloat:duration/frameCount] forKey:(NSString *)kCGImagePropertyGIFDelayTime];


            //Add the modified Data back into the image’s metadata
            [metadataAsMutable setObject:EXIFDictionary forKey:(NSString *)kCGImagePropertyExifDictionary];
            [metadataAsMutable setObject:GPSDictionary forKey:(NSString *)kCGImagePropertyGPSDictionary];
            [metadataAsMutable setObject:RAWDictionary forKey:(NSString *)kCGImagePropertyRawDictionary];
            [metadataAsMutable setObject:GIFDictionary forKey:(NSString *)kCGImagePropertyGIFDictionary];

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

            //            CGImageDestinationAddImage(destination, image.CGImage, (__bridge CFDictionaryRef)frameProperties);

            CFRelease(source);