2011-12-16 70 views
1

我希望在将图像存储为NSData对象之前压缩图像。从NSData以编程方式在Iphone中压缩图像

下面是代码,它可以帮助我拍摄图像的对象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图像相关的功能控制的格式和压缩以及:

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

您可能需要创建一个NSURL如果referenceURL返回一个字符串。

NSImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL: referenceURL]]; 
NSData *compressedImage = UIImageJPEGRepresentation(image, .1); //.1 is low quality 
1

如果您使用的是UIImagePickerController,则返回的图像将是一个JPEG,它已被压缩(我认为)。如果没有,您可以使用AVAssetWriter将图像写入JPEG或PNG。

+0

我想高达100 KB的压缩这一形象,截至目前其1 MB。 – 2011-12-16 15:25:57

+0

正在调整图像的大小选项? – Brian 2011-12-16 15:28:43

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;} 
相关问题