作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简单来说,我想“恢复”裁剪操作。在裁剪中,您选择一个矩形并将图像剪切到指定的矩形。在我的情况下,我需要做相反的事情 - 在图像周围添加空白空间并用颜色填充它。注意 - 图像可能有透明背景,所以我不能只在另一个图像上绘制一个图像。
我已经拥有的所有输入数据(矩形和图像)。如何解决这个任务?
最佳答案
基本流程:
CGContextClearRect(CGContextRef c, CGRect rect);
清除新 UIImage 中心的矩形或 (Swift) .clear(_ rect: CGRect)
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/
我是一名优秀的程序员,十分优秀!