我有一个NSImage对象,我有一个CIDetector对象,可以检测该图像上的QR码。在检测到之后,我想修剪该图像,使其只有QR码。这就是我获得二维码的界限:
<td>
现在我如何修剪图像,使其仅包含<tr>
<td>Krack</td>
<td id="7" class="level" sorttable_customkey="7">
<img src="../img/CL7.png" alt="7">
</td>
</tr>
变量描述的区域。
答案 0 :(得分:0)
您需要创建一个新的*
并绘制您想要的原始图像部分。
NSImage
答案 1 :(得分:0)
在Swift 5中
func trim(image: NSImage, rect: CGRect) -> NSImage {
let result = NSImage(size: rect.size)
result.lockFocus()
let destRect = CGRect(origin: .zero, size: result.size)
image.draw(in: destRect, from: rect, operation: .copy, fraction: 1.0)
result.unlockFocus()
return result
}
答案 2 :(得分:0)
answer from onmyway133 很棒,但它不保留源图像的数据类型。例如,如果您的源是 .hdr
图像,则每个颜色通道都将是浮动的,但裁剪后的图像将是 8 位整数 RGBA 图像。
为了保留源的格式,您似乎必须深入到相关联的 CGImage
。我这样做:
extension NSImage {
func cropping(to rect: CGRect) -> NSImage {
var imageRect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
guard let imageRef = self.cgImage(forProposedRect: &imageRect, context: nil, hints: nil) else {
return NSImage(size: rect.size)
}
guard let crop = imageRef.cropping(to: rect) else {
return NSImage(size: rect.size)
}
return NSImage(cgImage: crop, size: NSZeroSize)
}
}