2011-12-16 5 views
1

이미지를 NSData 개체로 저장하기 전에 압축하려고합니다.NSData에서 프로그래밍 방식으로 이미지 압축하기

아래 코드는 이미지의 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

이미지에 EXIF ​​세부 정보가 있습니다. 해당 이미지와 타협 할 수 없습니다.이 방법으로 내 EXIF ​​데이터가 손상 될 수 있습니다. ? –

+0

잘 모르겠습니다. 진짜 빨리 시험해보고 알려주십시오. –

+0

나는 아이폰을 처음 사용하는데 어떻게이 방법을 사용할 수 있습니까? 도와주세요. –

1

UIImagePickerController를 사용하는 경우 반환되는 이미지는 이미 압축 된 JPEG입니다 (생각합니다). 그렇지 않은 경우 AVAssetWriter를 사용하여 이미지를 JPEG 또는 PNG로 쓸 수 있습니다.

+0

나는 그 1 메가 지금의로, 100 이하 개까지 이미지를 압축하고 싶습니다. –

+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;} 
관련 문제