Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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 如果过滤器应用于PNG,其中高度>;宽度,它将图像旋转90度。我怎样才能有效地防止这种情况?_Ios_Swift_Swift3 - Fatal编程技术网

Ios 如果过滤器应用于PNG,其中高度>;宽度,它将图像旋转90度。我怎样才能有效地防止这种情况?

Ios 如果过滤器应用于PNG,其中高度>;宽度,它将图像旋转90度。我怎样才能有效地防止这种情况?,ios,swift,swift3,Ios,Swift,Swift3,我正在制作一个简单的过滤应用程序。我发现,如果你从相机卷中加载一个PNG图像(PNG没有方向数据标志),并且高度大于宽度,在对所述图像应用某些失真过滤器后,它将旋转并呈现自己,就像它是一个横向图像一样 在我打开的许多标签页的某个地方,我在网上找到了下面的技术,它似乎正是我想要的。它使用第一次加载图像时图像的原始比例和方向 let newImage = UIImage(CIImage:(output), scale: 1.0, orientation: self.origImage.imageOr

我正在制作一个简单的过滤应用程序。我发现,如果你从相机卷中加载一个PNG图像(PNG没有方向数据标志),并且高度大于宽度,在对所述图像应用某些失真过滤器后,它将旋转并呈现自己,就像它是一个横向图像一样

在我打开的许多标签页的某个地方,我在网上找到了下面的技术,它似乎正是我想要的。它使用第一次加载图像时图像的原始比例和方向

let newImage = UIImage(CIImage:(output), scale: 1.0, orientation: self.origImage.imageOrientation)
但这是我尝试使用它时得到的警告:

Ambiguous use of 'init(CIImage:scale:orientation:)'
以下是我正在努力实现的全部目标:

//global variables    
 var image: UIImage!
 var origImage: UIImage!


func setFilter(action: UIAlertAction) {


origImage = image

// make sure we have a valid image before continuing!

    guard let image = self.imageView.image?.cgImage else { return }

    let openGLContext = EAGLContext(api: .openGLES3)
    let context = CIContext(eaglContext: openGLContext!)
    let ciImage = CIImage(cgImage: image)

let currentFilter = CIFilter(name: "CIBumpDistortion")
currentFilter?.setValue(ciImage, forKey: kCIInputImageKey)

if let output = currentFilter?.value(forKey: kCIOutputImageKey) as? CIImage{

//the line below is the one giving me errors which i thought would work.
    let newImage = UIImage(CIImage:(output), scale: 1.0, orientation: self.image.imageOrientation)
        self.imageView.image = UIImage(cgImage: context.createCGImage(newImage, from: output.extent)!)}
这些过滤器都能工作,不幸的是,它们将上面描述的图像旋转了90度,原因我怀疑

我尝试过其他一些方法,比如使用一个扩展来检查Uiimage的方向,并将CIimage转换为Uiimage,使用扩展,然后尝试将其转换回CIimage,或者只是将Uiimage加载到imageView进行输出。我在这个过程中遇到了一个又一个的障碍。我开始看起来很纠结,只是为了让某些图像也达到它们的默认方向

任何建议都将不胜感激


编辑:这里是我尝试的方法的来源:

我找到了答案。我最大的问题是“init(CIImage:scale:orientation:)的模糊用法”

事实证明,Xcode是自动将代码填充为“CIImage:scale:orientation”,而它本应该是CIImage:scale:orientation。这个非常模糊的错误导致了一个像我这样的新开发人员为此挠头3天。(CGImage和UIImage inits也是如此,但我最初的错误是CIImage,所以我用它来解释。)

有了这些知识,我能够为我的新输出制定以下代码:

if let output = currentFilter?.value(forKey: kCIOutputImageKey) as? CIImage{

    let outputImage = UIImage(cgImage: context.createCGImage(output, from: output.extent)!)

    let imageTurned = UIImage(cgImage: outputImage.cgImage!, scale: CGFloat(1.0), orientation: origImage.imageOrientation)
    centerScrollViewContents()
    self.imageView.image = imageTurned
    }

此代码替换OP中的if-let输出。

我找到了答案。我最大的问题是“init(CIImage:scale:orientation:)的模糊用法”

事实证明,Xcode是自动将代码填充为“CIImage:scale:orientation”,而它本应该是CIImage:scale:orientation。这个非常模糊的错误导致了一个像我这样的新开发人员为此挠头3天。(CGImage和UIImage inits也是如此,但我最初的错误是CIImage,所以我用它来解释。)

有了这些知识,我能够为我的新输出制定以下代码:

if let output = currentFilter?.value(forKey: kCIOutputImageKey) as? CIImage{

    let outputImage = UIImage(cgImage: context.createCGImage(output, from: output.extent)!)

    let imageTurned = UIImage(cgImage: outputImage.cgImage!, scale: CGFloat(1.0), orientation: origImage.imageOrientation)
    centerScrollViewContents()
    self.imageView.image = imageTurned
    }

这段代码替换了OP中的if-let输出。

我个人喜欢并使用了以下答案:扩展是一种干净的方法。谢谢你,我尝试将我的CIimage转换为UIimage,如下所示:let image=UIimage(CIimage:CIimage)来使用你提供的扩展,现在转换给我一个不明确的“init(CIimage:)error”用法。关于如何将Ciimage正确转换为uiimage有什么想法吗?谢谢,我还需要帮助将我正在使用的Ciimage转换为uiimage才能使用它。有什么建议吗?我忘了这个了。你可以使用CIImage属性扩展将你的气候渲染成我个人喜欢的可用UIImage,并使用了以下答案:扩展是一种干净的方法。谢谢,我尝试过将我的CIImage转换成UIImage,如下所示:let image=UIImage(CIImage:CIImage)使用您提供的扩展,现在转换给了我一个“init(CIImage:)error”的模糊用法。关于如何将Ciimage正确转换为uiimage有什么想法吗?谢谢,我还需要帮助将我正在使用的Ciimage转换为uiimage才能使用它。有什么建议吗?我忘了这个了。你可以使用CIImage属性扩展将你的气候渲染成一个可用的UIImage