0
votes

CGImageSourceCreateWithURL return always nil. I am passing [NSURL fileURLWithPath:getImagePath]. I have double check that image is there with url i am passing. Please find out the code below.

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
also my project is ARC enable. and here is the image file path file:///var/mobile/Containers/Data/Application/A54E8DBF-70AE-4C4A-BD57-9A2D26545C87/Documents/gifImage1.pngHit_Var
I have already checked this link. Image was saved on cacheDirectory. So i am using fileURLWithPath:getImagePath. But didn't find any solution from that link.Hit_Var

1 Answers

0
votes

while creating CGImageSourceRef source = CGImageSourceCreateWithURL((__bridge CFURLRef)imageURL, NULL); i just forgot to specify property of image. Here is the below working code of 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);