Как установить правильное местоположение для CIAttributedTextImageGenerator?

#swift #core-image #cifilter #ciimage

#swift #core-image #cifilter #ciimage

Вопрос:

Я использую "CIAttributedTextImageGenerator" для генерации CIImage из текста, а затем накладываю его на отредактированное изображение с помощью "CISourceAtopCompositing" :

     // Text to image
    let font = UIFont.systemFont(ofSize: 78)
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.alignment = .center
    paragraphStyle.firstLineHeadIndent = 5.0
    
    let shadow = NSShadow()
    shadow.shadowColor = UIColor.red
    shadow.shadowBlurRadius = 5

    let attributes: [NSAttributedString.Key: Any] = [
        .font: font,
        .foregroundColor: UIColor.blue,
        .paragraphStyle: paragraphStyle,
        .shadow: shadow
    ]

    let attributedQuote = NSAttributedString(string: "General Kenobi", attributes: attributes)
    let textGenerationFilter = CIFilter(name: "CIAttributedTextImageGenerator")!
    textGenerationFilter.setValue(attributedQuote, forKey: "inputText")
    textGenerationFilter.setValue(NSNumber(value: Double(inputSizeFactor)), forKey: "inputScaleFactor")
    let textImage = textGenerationFilter.outputImage!.oriented(.right)
    
    
    finalImage = textImage
        .applyingFilter("CISourceAtopCompositing", parameters: [ kCIInputBackgroundImageKey: finalImage])
  

Однако текстовое изображение всегда находится в правом нижнем углу моего отредактированного изображения:

введите описание изображения здесь

Как я могу установить для него пользовательское местоположение? Например, если я хочу, чтобы оно было в правом нижнем углу или в центре редактируемого изображения?

Ответ №1:

Вы можете применить преобразования к изображению, прежде чем составлять его поверх фона:

 let transformedText = textImage.transformed(by: CGAffineTransform(translationX: 200, y: 300)
  

Боюсь, вам придется самостоятельно рассчитать точное положение для центрирования изображения. Нет встроенного способа центрировать одно изображение поверх другого.