2016-11-10 12 views
1

UIImage *image = [UIImage imageWithData: data] я использую, но чем больше размер изображения с помощью четырех times.Original data.length = 100 KB, но этот изображение теперь имеет более чем 400 KB.You может сказать, чтобы завершить с компрессией. Но я не через следующий метод после сжатия data.length = 200 KB.NSData качества UIImage

Ниже мой путь

метод сжатия

// spend is size (KB) 
    - (NSData *)compressionImageData:(NSData *)data spend:(CGFloat)spend { 

     if (data.length < spend) { 
      return data; //no compression 
     } 
     UIImage *sourceImg = [UIImage imageWithData:data]; 

     CGFloat compression = 0.9f; 
     CGFloat maxCompression = 0.1f; 
     NSData *imageData = UIImageJPEGRepresentation(sourceImg, compression); 

     while ([imageData length] > spend && compression > maxCompression) { 
      compression -= 0.1; 
      imageData = UIImageJPEGRepresentation(sourceImg, compression); 
     } 
     return imageData; 
    } 

Скачать метод изображения:

- (void)loadPosterImage:(NSString *)imgURL { 
    weakSelf(); 
    [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:imgURL] 
      options:SDWebImageDownloaderLowPriority 
      progress:^(NSInteger receivedSize, NSInteger expectedSize) {} 
      completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { 
       strongSelf(); 
       // image is through [UIImage imageWithData: data] 
       self.posterImage = image; 
       self.posterData = data; 

      }]; 
} 

Размер изображения имеет более чем 500 КБ

data.lenght = 100KB

Это data.length изображения

https://i.stack.imgur.com/FzUvk.png

Это изображение изображения

https://i.stack.imgur.com/ozxa6.png

+0

Есть ли способ поместить данные непосредственно в размер изображения и данных .length size – xsflyer

+0

что вы пытаетесь достичь? – Adeel

+0

что вы хотите сделать? – KKRocks

ответ

0

Я не знаю, почему, но Вы можете перерисовывать изображение вроде этого:

+(NSData *)compressDataWithImage:(UIImage *)image toMaxFIleSize:(NSInteger)maxFileSize { 
UIImage *comImage; 

comImage = image; 
CGFloat compression = 1.0; 
NSData *imageData = UIImageJPEGRepresentation(comImage, compression); 
NSData *newData; 
while (imageData.length > maxFileSize) { 
    compression *= 0.5; 
    newData = UIImageJPEGRepresentation(comImage, compression); 
    if (newData.length == imageData.length) { 
     CGSize newSize = CGSizeMake(comImage.size.width * 0.5, comImage.size.height * 0.5); 
     UIGraphicsBeginImageContext(newSize); 
     [comImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
     comImage = UIGraphicsGetImageFromCurrentImageContext(); 
     newData = UIImageJPEGRepresentation(comImage, compression); 
    } 
    imageData = newData; 
    } 

return imageData; 

} 

+0

@nvNoaDev Вы измените размер изображения, вы создали новый «newSize». Я не хочу Размер изображения – xsflyer

+0

Прошу прощения, это единственный способ, которым я знал – nvNovaDev

+0

@nvNoaDev спасибо – xsflyer

 Смежные вопросы

  • Нет связанных вопросов^_^