gpt4 book ai didi

ios - 如果将滤镜应用于高度 > 宽度的 PNG,它会将图像旋转 90 度。我怎样才能有效地防止这种情况发生?

转载 作者:行者123 更新时间:2023-11-28 08:11:57 25 4
gpt4 key购买 nike

我正在制作一个简单的过滤器应用程序。我发现如果你从相机胶卷中加载一张 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 以进行输出.我在这个过程中遇到了一个又一个的障碍。我开始看起来真的很费解,只是为了让某些图像也达到它们的默认方向。

如有任何建议,我们将不胜感激!

编辑:这里是我得到我正在尝试的方法的地方:When applying a filter to a UIImage the result is upside down

最佳答案

我找到了答案。我最大的问题是“‘init(CIImage:scale:orientation:)’的使用不明确”

事实证明,Xcode 自动将代码填充为“CIImage:scale:orientation”,而它应该是 ciImage:scale:orientation' 这个非常模糊的错误让新开发人员像我一样挠头 3 天. (对于 CGImage 和 UIImage 初始化也是如此,但我最初的错误是 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 输出。

关于ios - 如果将滤镜应用于高度 > 宽度的 PNG,它会将图像旋转 90 度。我怎样才能有效地防止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43528115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com