2016-11-10 4 views
1

품질,하지만 더 큰 네 times.Original data.length입니다 = 1백킬로바이트에 의한 이미지의 크기,하지만 이미지 현재 400 개 이상이 KB.You가 완료 될 때까지 말할 수있다 하지만 압축 후 다음과 같은 방법을 사용합니다. data.length = 200KB. 을 NSData있는 UIImage의 내가 <code>UIImage *image = [UIImage imageWithData: data]</code>를 사용

다음

내 방법입니다

// 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; 

      }]; 
} 

이미지 크기 보유 이상의 5백킬로바이트

data.lenght = 100킬로바이트

이 이미지의 data.length입니다가있다

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

이것은 인 화상 이미지의

,451,515,

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