2013-11-03 3 views
3

내 iOS 응용 프로그램에서 OpenJPEG을 컴파일 할 수 있었지만 UIImage를 J2K 파일 또는 메모리 버퍼의 J2K로 변환하려고 시도 할 수있는 실마리가 없습니다. 제안?iOS에서 UIImage를 J2K (JPEG2000)로 변환하려면 어떻게해야합니까?

+0

J2K? Jpeg 2000 파일을 저장 하시겠습니까? 나는 맥 OS에서는 그렇게했지만 iOS에서는 그렇지 못했다. 워드 프로세서를 조금 둘러 보면 CGImageDestination을 만들고 kUTTypeJPEG2000 유형을 지정해야한다고 생각합니다. –

+0

iOS에서 작동하는지 확인해보고 감사하겠습니다. – jjxtra

+0

@DuncanC 이것은 놀랍도록 잘 작동하여 투명도가 유지 된 JPG보다 작은 이미지를 만들어 냈습니다. 저를 지적 해 주셔서 고마워요. – jjxtra

답변

2

분명히 ImageIO가이 작업을 수행 할 수 있습니다. 프로젝트에 이미지 io 프레임 워크를 추가해야합니다.이 코드는 나를 위해 작동합니다.

#import <ImageIO/ImageIO.h> // or @import ImageIO if modules enabled 
#import <MobileCoreServices/MobileCoreServices.h> 

// ...  

// quality is 0-1 (0 = smallest file size, 1 = lossless quality) 
+ (NSData*) convertToJPEG2000:(UIImage*)image withQuality:(float)quality 
{ 
    NSMutableData* d = [NSMutableData data]; 
    CGImageDestinationRef destinationRef = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)d, kUTTypeJPEG2000, 1, NULL); 
    CGImageDestinationSetProperties(destinationRef, NULL); 
    CGImageDestinationAddImage(destinationRef, image.CGImage, (__bridge CFDictionaryRef)@{ (NSString*)kCGImageDestinationLossyCompressionQuality: @(quality) }); 

    if (!CGImageDestinationFinalize(destinationRef)) 
    { 
     d = nil; 
    } 
    CFRelease(destinationRef); 

    return d; 
} 
+0

지난 번 확인한 결과, iOS는'kUTTypeJPEG2000'을 지원하지 않았습니다. 형식 식별자 상수가 있지만 인코딩이 작동하지 않았습니다. 어떤 iOS 버전을 사용하셨습니까? –

+0

이것은 iOS 5 이상에서 작동합니다. 이전 iOS 버전을 테스트하지 않았습니다. – jjxtra

+0

iOS 3+에서 지원되는 것처럼 보입니다 - extern const CFStringRef kUTTypeJPEG2000 __OSX_AVAILABLE_STARTING (__ MAC_10_4, __ IPHONE_3_0); iOS 7의 – jjxtra

관련 문제