2013-11-22 6 views
0

Я хочу загрузить изображение на сервер. Но перед загрузкой я хочу сжать это изображение, а затем загрузить на сервер. Я не хочу загружать изображение более 2 мб. Я использовал эту логику, но если размер изображения большой, то он не работает. циклов, а также занимаемая память увеличилась до 1 Гб во время обработки.Сжатие изображения на момент загрузки

double compressionRatio=1; 
NSData *imgData=UIImagePNGRepresentation(proImage.image,compressionRatio); 
    while ([imgData length]>50000) { 
    compressionRatio=compressionRatio*50; 
    imgData=UIImageJPEGRepresentation(proImage.image,compressionRatio); 
    } 
+0

Почему вы используете представление PNG, прежде чем 'while' цикла? И 'compressionRatio' должно быть между 0.0 (максимальное сжатие) и 1.0 (без сжатия). Документация - ваш друг: https://developer.apple.com/library/iOS/documentation/UIKit/Reference/UIKitFunctionReference/Reference/reference.html#//apple_ref/doc/uid/TP40006894-CH3-SW9 –

+0

@rokjarc tell мне тогда как сжимать изображение перед отправкой его на сервер – vivek

+1

2MB равно 2097152 байт, а не 50000 байт. –

ответ

0

Пожалуйста, взгляните на UIImageJPEGRepresentation documentation.

NSData * UIImageJPEGRepresentation (
    UIImage *image, 
    CGFloat compressionQuality 
); 

compressionQuality = 0.0; ... max compression 
compressionQuality = 1.0; ... min compression 

Вы могли бы попробовать что-то вроде:

NSData *imgData=UIImagePNGRepresentation(proImage.image,compressionRatio); 

if ([NSData length] > maxSizeThatYouWant) { 

    CGFloat compressionNeeded = (CGFloat)[NSData length]/(CGFloat)maxSizeThatYouWant; 

    imgData=UIImageJPEGRepresentation(proImage.image,compressionNeeded); 
} 
Смежные вопросы