将一张图像分成多个部分后,如何在 Swift 中使用 UIImage 数组?

Posted

技术标签:

【中文标题】将一张图像分成多个部分后,如何在 Swift 中使用 UIImage 数组?【英文标题】:How to use an UIImage array in Swift after dividing one image into multiple parts? 【发布时间】:2017-08-25 13:14:48 【问题描述】:

我关注this dicussion 并获得了一组图像,这些图像是原始图像的分割部分。如果我打印它,它看起来像这样:

[<UIImage: 0x61000008ea60>, 309, 212, <UIImage: 0x61000008ec90>, 309, 212, <UIImage: 0x61000008ebf0>, 309, 213, <UIImage: 0x61000008ec40>, 309, 213]

如何使用这个数组的元素?在常规情况下,我将拥有图像的名称,并且可以使用例如UIImage(named: "")。这个数组没有显示任何名字。你有什么想法吗?

也许我的错误在这里:

 func setImage()


        testImage = UIImageView(frame: CGRect(x: 0, y: 0, width: size/1.5, height: size/1.5))
        testImage.center = CGPoint(x: view.frame.width/2, y: view.frame.height/2)


        slice(image: UIImage(named:"leopard_PNG14834")!, into: 8)

        testImage.image = images[2]


        view.addSubview(testImage)



这是功能代码

func slice(image: UIImage, into howMany: Int) -> [UIImage] 
    let width: CGFloat
    let height: CGFloat

    switch image.imageOrientation 
    case .left, .leftMirrored, .right, .rightMirrored:
        width = image.size.height
        height = image.size.width
    default:
        width = image.size.width
        height = image.size.height
    

    let tileWidth = Int(width / CGFloat(howMany))
    let tileHeight = Int(height / CGFloat(howMany))

    let scale = Int(image.scale)


    let cgImage = image.cgImage!

    var adjustedHeight = tileHeight

    var y = 0
    for row in 0 ..< howMany 
        if row == (howMany - 1) 
            adjustedHeight = Int(height) - y
        
        var adjustedWidth = tileWidth
        var x = 0
        for column in 0 ..< howMany 
            if column == (howMany - 1) 
                adjustedWidth = Int(width) - x
            
            let origin = CGPoint(x: x * scale, y: y * scale)
            let size = CGSize(width: adjustedWidth * scale, height: adjustedHeight * scale)
            let tileCgImage = cgImage.cropping(to: CGRect(origin: origin, size: size))!
            images.append(UIImage(cgImage: tileCgImage, scale: image.scale, orientation: image.imageOrientation))
            x += tileWidth
        
        y += tileHeight
    
    return images

【问题讨论】:

请提供更多细节。你想对图像做什么?你可以通过它们在数组中的索引来访问它们。 size 是在哪里定义的? 大小 = view.frame.width 尝试按照我在回答中的建议测试您的代码,看看会发生什么。 【参考方案1】:

如果您在将图像添加到 ViewController 时遇到困难,这是您常用的方法,假设输入图像数组:

let image = images[0]
let imageView = UIImageView(image: image)
self.view.addSubview(imageView)

编辑

如果您弄乱了图像视图的框架,我建议您在使用上述图像初始化 UIImageView 后进行操作。要测试发生了什么,也许只需添加一个带有所需图像的 ImageView 而不会弄乱框架。然后检查您用于设置框架的变量。

【讨论】:

太棒了!非常感谢! 不用担心,很高兴为您提供帮助:)【参考方案2】:

您已经获得了一个包含UIImage 类型对象的数组。

let images = slice(image: someOriginalImage, into: 4)
let firstImage = images[0] // firstImage is a UIImage

309, 212 是图片的大小。

【讨论】:

以上是关于将一张图像分成多个部分后,如何在 Swift 中使用 UIImage 数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift 4中使图像视图变圆

如何在swift中使背景视图透明但图像不透明[关闭]

用MATLAB将一幅图分割成4*3的小块该怎么做呢?

如何在 Swift 中使 iPhone 状态栏透明?

使用 Python 图像库将一张图像切割成多张图像

MySQL 分区表原理及使用详解