我试图自动裁剪在其上方和下方具有无关白色的图像。我试图迭代图像的像素,找到第一个非白色像素,将其设置为从顶部裁剪的适当高度,然后使用最后一个非白色像素作为裁剪的适当高度从底部。
我尝试使用CGBitmapContextGetData
生成单个像素,但据我所知,这只保留了图片的RGB颜色,因此丢失了像素高度的信息。
有没有人知道在能够访问这些图片的高度信息的同时迭代UIImage的各个像素的方法?谢谢。
答案 0 :(得分:2)
您可以从UIImage的cgImage表示中获取像素。宽度和高度可在UIImage的大小字段中找到。对于每个像素,检查该像素的RGBA值。如果它们不是全部255,则它是非白色像素。
func firstNonWhitePixel(image: UIImage) -> CGPoint? {
let width = Int(image.size.width)
let height = Int(image.size.height)
if let cfData = image.cgImage?.dataProvider?.data, let pointer = CFDataGetBytePtr(cfData) {
for x in 0..<width {
for y in 0..<height {
let pixelAddress = x * 4 + y * width * 4
if pointer.advanced(by: pixelAddress).pointee != UInt8.max || //Red
pointer.advanced(by: pixelAddress + 1).pointee != UInt8.max || //Green
pointer.advanced(by: pixelAddress + 2).pointee != UInt8.max || //Blue
pointer.advanced(by: pixelAddress + 3).pointee != UInt8.max { //Alpha
return CGPoint(x: x, y: y)
}
}
}
}
return nil
}