2016-11-10 8 views
1

私はUIImage *image = [UIImage imageWithData: data]を使用していますが、4 times.Original data.length = 100キロバイトによる画像のサイズが大きいが、これ画像は今400 KB.Youが完了すると言うかもしれないより多くを持っています私は圧縮後に以下のメソッドを使用していますdata.length = 200 KBNSDataの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; 

      }]; 
} 

画像サイズこれは、これは画像ある画像

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

data.lengthある以上500キロバイト

data.lenght = 100キロバイト

を有します画像の

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

関連する問題