Generate image on top of another image using core graphics năm 2024

2 Setting

import UIKit
import CoreImage
let sharedContext = CIContext[options: [.useSoftwareRenderer : false]]
// Technique 
# 4
func resizedImage[at url: URL, scale: CGFloat, aspectRatio: CGFloat] -> UIImage? {
    guard let image = CIImage[contentsOf: url] else {
        return nil
    }
    let filter = CIFilter[name: "CILanczosScaleTransform"]
    filter?.setValue[image, forKey: kCIInputImageKey]
    filter?.setValue[scale, forKey: kCIInputScaleKey]
    filter?.setValue[aspectRatio, forKey: kCIInputAspectRatioKey]
    guard let outputCIImage = filter?.outputImage,
        let outputCGImage = sharedContext.createCGImage[outputCIImage,
                                                        from: outputCIImage.extent]
    else {
        return nil
    }
    return UIImage[cgImage: outputCGImage]
}

1 to

import UIKit
import CoreImage
let sharedContext = CIContext[options: [.useSoftwareRenderer : false]]
// Technique 
# 4
func resizedImage[at url: URL, scale: CGFloat, aspectRatio: CGFloat] -> UIImage? {
    guard let image = CIImage[contentsOf: url] else {
        return nil
    }
    let filter = CIFilter[name: "CILanczosScaleTransform"]
    filter?.setValue[image, forKey: kCIInputImageKey]
    filter?.setValue[scale, forKey: kCIInputScaleKey]
    filter?.setValue[aspectRatio, forKey: kCIInputAspectRatioKey]
    guard let outputCIImage = filter?.outputImage,
        let outputCGImage = sharedContext.createCGImage[outputCIImage,
                                                        from: outputCIImage.extent]
    else {
        return nil
    }
    return UIImage[cgImage: outputCGImage]
}

2 on the options passed on

import UIKit
import CoreGraphics
// Technique 
# 2
func resizedImage[at url: URL, for size: CGSize] -> UIImage? {
    guard let imageSource = CGImageSourceCreateWithURL[url as NSURL, nil],
        let image = CGImageSourceCreateImageAtIndex[imageSource, 0, nil]
    else {
        return nil
    }
    let context = CGContext[data: nil,
                            width: Int[size.width],
                            height: Int[size.height],
                            bitsPerComponent: image.bitsPerComponent,
                            bytesPerRow: 0,
                            space: image.colorSpace ?? CGColorSpace[name: CGColorSpace.sRGB]!,
                            bitmapInfo: image.bitmapInfo.rawValue]
    context?.interpolationQuality = .high
    context?.draw[image, in: CGRect[origin: .zero, size: size]]
    guard let scaledImage = context?.makeImage[] else { return nil }
    return UIImage[cgImage: scaledImage]
}

9 creation yielded results an order of magnitude slower than base results.

Chủ Đề