6

CGImageSourceCreateThumbnailAtIndexからサムネイルを作成する関数を使用したいUIImage。私が持っているのはUIImageそれ自体だけです。イメージは のスナップショットUIViewです。

サムネイルを作成するために他の方法を使用したくありません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、そのイメージはディスクではなくメモリ上にあり、ディスクに保存したくありません。そうしないと、パフォーマンスが低下します。

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

4

3 に答える 3

23

Swift 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)
于 2017-09-15T07:43:08.057 に答える
11

このように画像データを使用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作成できます。CGImageSourceRefCGImageSourceCreateWithURL

CGImageSourceRef src = CGImageSourceCreateWithURL((__bridge CFURLRef)(imageFileURL), NULL);
于 2016-11-18T11:54:31.677 に答える