iOS: как получить изображение определенного размера из AssetsLibrary

У меня проблемы с моим приложением, и я ожидаю вашей помощи. Я хочу загрузить фотографию определенного размера**(1200*1800)** из библиотеки на сервер, и мне нужно получить исходное изображение, а затем сжать его.

UIImage *image = [UIImage imageWithCGImage:[asset fullResolutionImage] scale:[asset scale] orientation:0];

К сожалению, мое приложение аварийно завершает работу, если исходный размер изображения превышает 20M. Итак, есть ли способ получить изображение определенного размера напрямую из AssetsLibrary?


person Friday    schedule 18.07.2013    source источник
comment
Почему бы вам не проверить размер изображения в байтах перед его загрузкой в ​​память?   -  person Stavash    schedule 18.07.2013
comment
Мне нужно получить оригинальное изображение, а затем использовать его для изменения размера.   -  person Friday    schedule 18.07.2013


Ответы (1)


Я просто добавил полезный код, я не уверен, но может быть полезен в вашем случае:

Для получения кадрированного изображения:

UIImage *croppedImg = nil;
CGRect cropRect = CGRectMake(AS YOu Need);
croppedImg = [self croppIngimageByImageName:self.imageView.image toRect:cropRect];

Используйте следующий метод, который возвращает UIImage (как вам нужен размер изображения)

- (UIImage *)croppIngimageByImageName:(UIImage *)imageToCrop toRect:(CGRect)rect
    {
        //CGRect CropRect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height+15);

        CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);
        UIImage *cropped = [UIImage imageWithCGImage:imageRef];
        CGImageRelease(imageRef);

        return cropped;
    }

Здесь вы получаете обрезанное изображение, которое возвращается вышеуказанным методом;

ИЛИ ИЗМЕНЕНИЕ РАЗМЕРА

А также используйте следующий метод для определенных высоты и ширины с изображением для изменения размера UIImage:

+ (UIImage*)resizeImage:(UIImage*)image withWidth:(int)width withHeight:(int)height
{
    CGSize newSize = CGSizeMake(width, height);
    float widthRatio = newSize.width/image.size.width;
    float heightRatio = newSize.height/image.size.height;

    if(widthRatio > heightRatio)
    {
        newSize=CGSizeMake(image.size.width*heightRatio,image.size.height*heightRatio);
    }
    else
    {
        newSize=CGSizeMake(image.size.width*widthRatio,image.size.height*widthRatio);
    }


    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

Этот метод возвращает NewImage нужного вам размера.

person iPatel    schedule 18.07.2013
comment
Но как я могу получить исходное изображение (imageToCrop или изображение)? Если его размер слишком велик, мое приложение получит предупреждение о нехватке памяти и выйдет из строя, когда я получу исходное изображение из AssetsLibrary. - person Friday; 18.07.2013