Git Product home page Git Product logo

Comments (3)

beta-dawg avatar beta-dawg commented on August 16, 2024

This happens because ELC tries to keep all those selected images in an array, in memory. iPhone 5, with more memory, is able to keep more images around in memory than the smaller iPhone 4. What you want to do is get the URL to the asset for all selected images from ELC instead of actual images, and then use the AssetsLibrary to get to the actual image from the URL

  1. Comment out the following line in ELCImagePickerController.m
    // Do not hold images in the array - crashes when several large images are selected
    // [workingDictionary setObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]] forKey:@"UIImagePickerControllerOriginalImage"];
  2. In your implementation of - (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info, do the following:

for(NSDictionary dict in info)
{
NSString
mediaType = [dict objectForKey:UIImagePickerControllerMediaType];
NSURL* assetURL = [dict objectForKey:UIImagePickerControllerReferenceURL];

if ([mediaType isEqual:@"ALAssetTypeVideo"])
{
// it's a video
}
else
{
// it's a photo
ALAssetsLibrary *assetslibrary = [[ALAssetsLibrary alloc] init];
[assetslibrary assetForURL:assetURL
resultBlock:resultblock
failureBlock:failureblock];
}
}

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *asset) {
long long int size = asset.defaultRepresentation.size;
if (size < 20 * 1024 * 1024) {
Byte *buffer = (Byte *) malloc((size_t) size);

                NSError *error = nil;
                NSUInteger k = [asset.defaultRepresentation getBytes:buffer fromOffset:0
                                                              length:(size_t) size error:&error];

                if (k > 0 && !error) {
                    NSData* data = [[NSData alloc] initWithBytesNoCopy:buffer length:k freeWhenDone:YES];
                    // this is the raw image data you can use to get the image
                   UIImage* image = [UIImage alloc] initWithData:data];
                }
                else {
                    NSLog(@"Can not get asset - %@", error);
                }
            }
            else {
                // File is too big to fit into memory. Copy to a temporary file
                // this is just to be safe in case you have images larger than 20MB (makes more sense for videos)
            }

};

from elcimagepickercontroller.

jvanmetre avatar jvanmetre commented on August 16, 2024

Thanks beta-dawg for the concise explanation, and fixes. The original code will stay the same for now.

from elcimagepickercontroller.

csamzhou avatar csamzhou commented on August 16, 2024

@beta-dawg First thanks for the solution. But the ALAsset I get inside the block is nil, the url is fine, do you have any idea?

from elcimagepickercontroller.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.