2011-12-16 13 views
1

NSDataオブジェクトとして保存する前に画像を圧縮したいと思います。NSphoneからプログラムで画像を圧縮する

以下は、画像のNSDataオブジェクトを取るのに役立つコードです。

NSURL *referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL]; 
     ALAssetsLibrary *library1 = [[ALAssetsLibrary alloc] init]; 
     [library1 assetForURL:referenceURL resultBlock:^(ALAsset *asset) 
     { 

      int byteArraySize = asset.defaultRepresentation.size; 

      NSMutableData* rawData = [[NSMutableData alloc]initWithCapacity:byteArraySize]; 
      void* bufferPointer = [rawData mutableBytes]; 

      NSError* error=nil; 
      [asset.defaultRepresentation getBytes:bufferPointer fromOffset:0 length:byteArraySize error:&error]; 
      if (error) { 
       NSLog(@"%@",error); 
      } 
      rawData = [NSMutableData dataWithBytes:bufferPointer length:byteArraySize]; 
} 

ご協力いただきますようお願い申し上げます。

答えて

5

UIImagePickerControllerは、圧縮された画像を返却していますが、UIKitの機能とPNG画像のための関連機能に建てられたこのと同様のフォーマットと圧縮を制御することができます。referenceURL場合は、NSURLを作成する必要があるかもしれません

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

文字列を返します。

NSImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL: referenceURL]]; 
NSData *compressedImage = UIImageJPEGRepresentation(image, .1); //.1 is low quality 
使用するのは簡単
+1

画像にEXIFの詳細がありますが、私はそれらと妥協しません。この方法はEXIFデータに何らかの害を及ぼします。 ? –

+0

わかりません。本当に素早く試してみてください。 –

+0

私はIphoneを初めて使用していますが、どうすればこの方法を使うことができますか?助けてください。 –

1

UIImagePickerControllerを使用している場合、返されるイメージはJPEGであり、既に圧縮されています(私は思う)。そうでない場合は、AVAssetWriterを使用してイメージをJPEGまたはPNGとして書き込むことができます。

+0

私は今、その1メガビットのように、100 KB件までこの画像を圧縮したいです。 –

+0

イメージのサイズを変更するオプションはありますか? – Brian

+0

イメージにEXIFの詳細がありますが、私はそれらと妥協しません。このメソッドはEXIFデータに何らかの害を及ぼします。 ? –

0

: -

-(UIImage *)fireYourImageForCompression:(UIImage *)imgComing{ 
NSData *dataImgBefore = [[NSData alloc] initWithData:UIImageJPEGRepresentation((imgComing), 1.0)];//.1 BEFORE COMPRESSION 
int imageSizeBefore  = (int)dataImgBefore.length; 


NSLog(@"SIZE OF IMAGE: %i ", imageSizeBefore); 
NSLog(@"SIZE OF IMAGE in Kb: %i ", imageSizeBefore/1024); 



NSData *dataCompressedImage = UIImageJPEGRepresentation(imgComing, .1); //.1 is low quality 
int sizeCompressedImage  = (int)dataCompressedImage.length; 
NSLog(@"SIZE AFTER COMPRESSION OF IMAGE: %i ", sizeCompressedImage); 
NSLog(@"SIZE AFTER COMPRESSION OF IMAGE in Kb: %i ", sizeCompressedImage/1024); //AFTER 

//now change your image from compressed data 
imgComing = [UIImage imageWithData:dataCompressedImage]; 


return imgComing;} 
関連する問題