2016-11-18 21 views
2

CGImageSourceCreateThumbnailAtIndexという機能を使用して、UIImageからサムネイルを作成します。私が持っているのはUIImageです。イメージはUIViewのスナップショットです。CGImageSourceCreateThumbnailAtIndexを使用してUIImageからサムネイルを作成

サムネイルを作成する方法は他にはありません。既に使用している他の方法と比較したいので、CGImageSourceCreateThumbnailAtIndexを使用しています。

これは、これまでのコードです。

私はこのコードでUIImageカテゴリを作成している:

- (UIImage *)createSquaredThumbnailWithWidth:(NSInteger)width { 

    CFDictionaryRef options = (__bridge CFDictionaryRef) @{ 
                 (id) kCGImageSourceCreateThumbnailWithTransform : @YES, 
                 (id) kCGImageSourceCreateThumbnailFromImageAlways : @YES, 
                 (id) kCGImageSourceThumbnailMaxPixelSize : @(width) 
                 }; 

    CGImageRef scaledImageRef = CGImageSourceCreateThumbnailAtIndex(????, 0, options); 


    UIImage* scaled = [UIImage imageWithCGImage:scaledImageRef]; 

    CGImageRelease(scaledImageRef); 

    return scaled; 
} 

を私の問題は、この行を次のとおりです。

CGImageRef scaledImageRef = CGImageSourceCreateThumbnailAtIndex(????, 0, options); 

この関数の最初のパラメータはCGImageSourceRefを要求しますが、のような私が言いました、私はちょうどUIImageを持っています、そのイメージはディスク上ではなくメモリ上にあります。ディスクに保存したくない場合や、パフォーマンスが低下する場合があります。

メモリにあるUIImageからCGImageSourceRefを取得するにはどうすればよいですか?

+0

どのメモリには?すべてのイメージ・インスタンスがメモリー内にあります。 @Nirav Dと同じように使ってください。 –

答えて

5

CGImageSourceCreateWithDataを使用し、画像データをこのようにCFDataRefとして渡してみましたか?

NSData *imageData = UIImagePNGRepresentation(image); 
CGImageSourceRef src = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL); 
CFDictionaryRef options = (__bridge CFDictionaryRef) @{ 
                (id) kCGImageSourceCreateThumbnailWithTransform : @YES, 
                (id) kCGImageSourceCreateThumbnailFromImageAlways : @YES, 
                (id) kCGImageSourceThumbnailMaxPixelSize : @(width) 
                }; 

CGImageRef scaledImageRef = CGImageSourceCreateThumbnailAtIndex(src, 0, options); 
UIImage *scaled = [UIImage imageWithCGImage:scaledImageRef]; 
CGImageRelease(scaledImageRef); 
return scaled; 

注:画像のURLを持っているなら、あなたはCGImageSourceCreateWithURLを使用してCGImageSourceRefを作成することができ

CGImageSourceRef src = CGImageSourceCreateWithURL((__bridge CFURLRef)(imageFileURL), NULL); 
+1

thats it!ありがとう! – SpaceDog

+0

コードの迅速な3バージョンはありますか? – JAHelia

3

スウィフト4コード

let imageData = UIImagePNGRepresentation(image)! 
let options = [ 
    kCGImageSourceCreateThumbnailWithTransform: true, 
    kCGImageSourceCreateThumbnailFromImageAlways: true, 
    kCGImageSourceThumbnailMaxPixelSize: 300] as CFDictionary 
let source = CGImageSourceCreateWithData(imageData, nil)! 
let imageReference = CGImageSourceCreateThumbnailAtIndex(source, 0, options)! 
let thumbnail = UIImage(cgImage: imageReference) 
+0

これは本当に一連のウェブ検索の後に便利でした!この素晴らしいソリューションをありがとう。 – Aweda

関連する問題