2017-04-19 5 views
0
- (void)imagePickerController:(TZImagePickerController *)picker   
     didFinishPickingPhotoModes:(NSArray<RHPhotoModel *> *)photos 
        sourceAssets:(NSArray *)assets   
      isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto  
         infoArray:(NSArray *)infoArray { 

      for (RHPhotoModel *model in photos) { 
       UIImage *tmpImage = [UIImage imageWithContentsOfFile:model.photoPath]; 
       NSData *data1 = UIImageJPEGRepresentation(tmpImage,1); 

       NSData *data2 = [NSData dataWithContentsOfFile:model.photoPath]; 

       UIImage *image = [UIImage imageWithData:data2]; 
       NSData *data3 = UIImageJPEGRepresentation(image,1); 

       NSLog(@"data1=%lu, data2=%lu, data3=%lu", (unsigned long)data1.length, (unsigned long)data2.length, (unsigned long)data3.length); 
     } 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

위의 방법을 사용하면 이미지 photoPath가 포함 된 PhotoModel을 완성 할 수 있습니다.
왜 [NSData dataWithContentsOfFile : model.photoPath]를 사용합니까?
data2는 2497519 바이트입니다.
그러나 UIImage * tmpImage = [UIImage imageWithContentsOfFile : model.photoPath];를 사용합니다. NSData * data1 = UIImageJPEGRepresentation (tmpImage, 1); data1은 7234468 바이트입니다.UIImageJPEGRepresentation과 동일한 이미지의 데이터 크기/길이가 다른 이유 (로컬 경로로 이미지 가져 오기)

NSLog 데이터 - "데이터를 압축"으로 DATA1 = 7,234,468 (바이트), DATA2 = 2,497,519 (바이트), DATA3 = 7,234,468 (바이트)

enter image description here

+0

그것은 JPEG (시스템은 다르다)의 경우는 아니지만, 비유이다 : 20 * 20의 이미지가 있다고 가정 해 봅시다. 품질 1로 변환하면 각 픽셀을 8 바이트로 저장합니다. 이제 품질을 0.5로 변환하면 각 픽셀을 4 바이트로 저장합니다. 품질이 미리 중요하지 않아도 각 픽셀은 바이트로 저장됩니다. 따라서 data1과 data3은 같은 양의 바이트를 갖는 것이 정상입니다. 이제 원본 이미지를 저장하는 데 사용 된 품질이 무엇인지 알 수 없습니다. – Larme

+0

귀하의 질문은 무엇입니까? –

+0

나는 왜 그가 데이터 크기/길이가 같은 이미지에 대해 다른지 묻고 있다고 생각한다. –

답변

0

JPEG 형태가되는 것이다. .jpg 형식에 대한 정보는 Wikipedia here에서 찾을 수 있습니다. 그러나 이것의 배후에있는 수학은 다소 복잡 할 수 있습니다.

기본 아이디어는 동일한 이미지 데이터를 작은 크기로 저장하기를 원하므로 다른 압축 알고리즘을 사용하여 이미지를 더 작은 이미지로 변환하는 것입니다. 데이터 압축은 lossy 또는 lossless 일 수 있습니다. 예를 들어 PNG은 손실이 없으므로 품질은 동일하게 유지되지만 JPEG은 손실 ​​압축으로 더 많이 사용됩니다.

압축을 컴퓨터의 ZIP 파일로 생각하면 파일 크기가 더 작아집니다. 압축 품질을 1로 설정하면 Xcode에서 JPEG 파일의 크기가 원본 파일보다 클 수 있습니다. 그러나 압축 품질을 낮추면 압축 파일이 더 흐려 지거나 이상한 색상이 될 수 있습니다.

필자의 경험을 통해 압축 품질을 0.4 ~ 0.5로 설정하면 중간 크기의 파일로 더 좋은 품질을 유지한다는 것을 알게되었습니다. 이것이 도움이 되었으면 좋겠다.