相关疑难解决方法(0)

将UIImage转换为灰度,保持图像质量

我有这个扩展(找到obj-c并将其转换为Swift3)以获得相同UIImage但灰度:

public func getGrayScale() -> UIImage
{
    let imgRect = CGRect(x: 0, y: 0, width: width, height: height)

    let colorSpace = CGColorSpaceCreateDeviceGray()

    let context = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.none.rawValue).rawValue)
    context?.draw(self.cgImage!, in: imgRect)

    let imageRef = context!.makeImage()
    let newImg = UIImage(cgImage: imageRef!)

    return newImg
}
Run Code Online (Sandbox Code Playgroud)

我可以看到灰色图像,但它的质量非常糟糕......我唯一能看到的与质量相关的是bitsPerComponent: 8在上下文构造函数中.然而,看看Apple的文档,这是我得到的:

在此输入图像描述

它表明iOS只支持8bpc ......那么为什么我不能提高质量呢?

uiimage grayscale swift

19
推荐指数
6
解决办法
2万
查看次数

Swift - 来自 CIImage QR 码的图像数据/如何呈现 CIFilter 输出

我已经有一段时间遇到这个问题了,在这里看了几十个答案,似乎找不到任何有用的东西。

设想

我正在我的应用程序的 iOS 端生成一个二维码,并希望将此二维码发送到我目前正在开发的 WatchKit 扩展。

我如何生成二维码

func createQR(with string: String) {

    if let filter = CIFilter(name: "CIQRCodeGenerator") {

        //set the data to the contact data
        filter.setValue(string, forKey: "inputMessage")
        filter.setValue("L", forKey: "inputCorrectionLevel")

        if let codeImage = filter.outputImage {
            return UIImage(ciImage: codeImage);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我接下来想要什么

我想从 QR 图像中获取数据,以便将其发送到 Apple Watch 应用程序,如下所示:

let data = UIImagePNGRepresentation(QRCodeImage);
Run Code Online (Sandbox Code Playgroud)

但是,这总是会返回,nil因为没有图像数据支持过滤器的输出。

注意:我知道没有与 CI Image 关联的数据,因为它没有被渲染,甚至没有与之关联的数据,因为它只是过滤器的输出。我不知道如何解决这个问题,因为我对图像处理等很陌生。:/

我试过的

创建一个cgImagefilter.outputImage

func createQR(with string: String) {
    if let filter …
Run Code Online (Sandbox Code Playgroud)

cocoa ios swift

4
推荐指数
1
解决办法
1378
查看次数

标签 统计

swift ×2

cocoa ×1

grayscale ×1

ios ×1

uiimage ×1