2012-03-19 9 views
3

Я принимаю изображения из библиотеки фотографий. У меня большие изображения 4-5 мб, но я хочу сжать эти изображения. Поскольку мне нужно хранить эти изображения в локальной памяти iphone.for использования меньше памяти или для получения меньше памяти предупреждение Мне нужно сжать эти изображения.Как сжать изображение в iphone?

Я не знаю, как сжимать изображения и видео. Так что я хочу знать, как сжать изображения?

UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

    NSData* data = UIImageJPEGRepresentation(image,1.0); 
    NSLog(@"found an image"); 

    NSString *path = [destinationPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpeg", name]]; 
    [data writeToFile:path atomically:YES]; 

Это код для сохранения моего изображения. Я не хочу хранить изображение целиком слишком большим. Поэтому я хочу сжать его до гораздо меньшего размера, так как мне нужно будет добавить несколько изображений.

Спасибо за ответ.

+1

Сжатие изображений не поможет вам с ошибками памяти. Вы можете сжимать изображения для сохранения дискового пространства (flash ram), но если вы хотите отображать изображения, они всегда будут распаковываться в памяти и будут использовать ширину * height * 4 ram. – Bastian

ответ

11

Вы можете выбрать более низкое качество для кодирования JPEG

NSData* data = UIImageJPEGRepresentation(image, 0.8); 

что-то вроде 0,8 не должно быть слишком заметным, и должны реально улучшить размеры файлов.

Помимо этого, обратите внимание на изменение размера изображения, прежде чем сделать представление JPEG, используя метод, как это:

+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize { 
    UIGraphicsBeginImageContext(newSize); 
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();  
    UIGraphicsEndImageContext(); 
    return newImage; 
} 

Источник: The simplest way to resize an UIImage?

+0

Я думаю, что ваш второй вопрос об изменении размера очень важен, и в зависимости от ситуации он может резко уменьшить размер, не жертвуя качеством. Особенно если вы обнаружите изображение большего размера, чем то, что можно просмотреть на экране. Отличный ответ. –

5

UIImageJPEGRepresentation (UIImage, качество);

1.0 означает максимальное качество и 0 означает минимальное качество.

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

NSData* data = UIImageJPEGRepresentation(image,1.0); 
1
NSData *UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality); 

ИЛИ

NSData *image_Data=UIImageJPEGRepresentation(image_Name,compressionQuality); 

возврата изображения как JPEG. Может вернуть nil, если изображение не имеет CGImageRef или неверного формата растрового изображения. compressionQuality является 0 (наиболее) & 1 (наименее).