gpt4 book ai didi

ios - 调整 UIImage 的 Canvas 大小并用颜色填充空白处?

转载 作者:行者123 更新时间:2023-12-01 15:40:39 24 4
gpt4 key购买 nike

简单来说,我想“恢复”裁剪操作。在裁剪中,您选择一个矩形并将图像剪切到指定的矩形。在我的情况下,我需要做相反的事情 - 在图像周围添加空白空间并用颜色填充它。注意 - 图像可能有透明背景,所以我不能只在另一个图像上绘制一个图像。

我已经拥有的所有输入数据(矩形和图像)。如何解决这个任务?

最佳答案

基本流程:

  • 创建纯色 UIImage
  • 获取 CGContext
  • 使用 (Obj-C) CGContextClearRect(CGContextRef c, CGRect rect); 清除新 UIImage 中心的矩形或 (Swift) .clear(_ rect: CGRect)
  • 将原始图像绘制到新图像的“透明矩形”中

  • 这是一个使用 Swift 的示例:
    func drawImageOnCanvas(_ useImage: UIImage, canvasSize: CGSize, canvasColor: UIColor ) -> UIImage {

    let rect = CGRect(origin: .zero, size: canvasSize)
    UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)

    // fill the entire image
    canvasColor.setFill()
    UIRectFill(rect)

    // calculate a Rect the size of the image to draw, centered in the canvas rect
    let centeredImageRect = CGRect(x: (canvasSize.width - useImage.size.width) / 2,
    y: (canvasSize.height - useImage.size.height) / 2,
    width: useImage.size.width,
    height: useImage.size.height)

    // get a drawing context
    let context = UIGraphicsGetCurrentContext();

    // "cut" a transparent rectanlge in the middle of the "canvas" image
    context?.clear(centeredImageRect)

    // draw the image into that rect
    useImage.draw(in: centeredImageRect)

    // get the new "image in the center of a canvas image"
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return image!

    }

    并这样称呼它:
        if let img = UIImage(named: "myimage") {

    let expandedSize = CGSize(width: img.size.width + 60, height: img.size.height + 60)

    let imageOnBlueCanvas = drawImageOnCanvas(img, canvasSize: expandedSize, canvasColor: .blue)

    let v = UIImageView(image: imageOnBlueCanvas)

    view.addSubview(v)

    }

    关于ios - 调整 UIImage 的 Canvas 大小并用颜色填充空白处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47506565/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com