Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用CilanczosCaleTransform Core图像过滤器调整图像大小_Ios_Swift_Core Image - Fatal编程技术网

Ios 使用CilanczosCaleTransform Core图像过滤器调整图像大小

Ios 使用CilanczosCaleTransform Core图像过滤器调整图像大小,ios,swift,core-image,Ios,Swift,Core Image,我试图使用CILanczosScaleTransform核心图像过滤器调整图像大小,但遇到了问题。这是我的密码: var imageView: UIImageView = UIImageView() var image: UIImage? imageView.frame = CGFrameMake(10,10,200,300) dispatch_async(dispatch_get_main_queue(), { let nsurl = NSURL(string:"http://..."

我试图使用
CILanczosScaleTransform
核心图像过滤器调整图像大小,但遇到了问题。这是我的密码:

var imageView: UIImageView = UIImageView()
var image: UIImage?
imageView.frame = CGFrameMake(10,10,200,300)
dispatch_async(dispatch_get_main_queue(), {
    let nsurl = NSURL(string:"http://...")
    var err: NSError?
    var getImageData = NSData(contentsOfURL: nsurl!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)
    if let imageData = getImageData {
        if let receivedImage = UIImage(data: imageData){
            image = receivedImage
/*
  so far all this code works fine, if I set imageView.image = image 
  the image displays with no problems...

  ...the problems are in this bit of code:
                                                    */
            let context = CIContext(options:nil)
            var ciimg = CIImage(image: image)
            var filter = CIFilter(name: "CILanczosScaleTransform")
            filter.setValue(image, forKey: kCIInputImageKey)
            filter.setValue(0.667, forKey: kCIInputScaleKey)
            let result: CIImage = filter.outputImage

            let extent = result.extent() // <-- specifically this line

            let newImage: UIImage? = UIImage(CIImage: result)
            imageView.image = newImage
        }
    }
})
我把我在Objective C上找到的代码翻译成了Swift,感觉可能是误译了


有人能纠正我的错误吗?

好的,这是我的错误。此行:
filter.setValue(image,forKey:kCIInputImageKey)
正在使用
image
中找到的
UIImage
并在过滤器内部使用它,而应该使用
ciimg
中找到的
CIImage

因此,完整的代码应该是:

var imageView: UIImageView = UIImageView()
var image: UIImage?
imageView.frame = CGFrameMake(10,10,200,300)
dispatch_async(dispatch_get_main_queue(), {
    let nsurl = NSURL(string:"http://...")
    var err: NSError?
    var getImageData = NSData(contentsOfURL: nsurl!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)
    if let imageData = getImageData {
        if let receivedImage = UIImage(data: imageData){
            image = receivedImage
            let context = CIContext(options:nil)
            var ciimg = CIImage(image: image)
            var filter = CIFilter(name: "CILanczosScaleTransform")
            filter.setValue(ciimg, forKey: kCIInputImageKey)
            filter.setValue(0.667, forKey: kCIInputScaleKey)
            let result: CIImage = filter.outputImage
            let extent = result.extent()
            let newImage: UIImage? = UIImage(CIImage: result)
            imageView.image = newImage
        }
    }
})

除了CGFrameMake之外,代码对我来说很好,但那是无关紧要的。
var imageView: UIImageView = UIImageView()
var image: UIImage?
imageView.frame = CGFrameMake(10,10,200,300)
dispatch_async(dispatch_get_main_queue(), {
    let nsurl = NSURL(string:"http://...")
    var err: NSError?
    var getImageData = NSData(contentsOfURL: nsurl!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)
    if let imageData = getImageData {
        if let receivedImage = UIImage(data: imageData){
            image = receivedImage
            let context = CIContext(options:nil)
            var ciimg = CIImage(image: image)
            var filter = CIFilter(name: "CILanczosScaleTransform")
            filter.setValue(ciimg, forKey: kCIInputImageKey)
            filter.setValue(0.667, forKey: kCIInputScaleKey)
            let result: CIImage = filter.outputImage
            let extent = result.extent()
            let newImage: UIImage? = UIImage(CIImage: result)
            imageView.image = newImage
        }
    }
})