【问题标题】:Issue when creating CIImage from file从文件创建 CIImage 时的问题
【发布时间】:2018-11-21 11:47:33
【问题描述】:

无论我尝试直接从文件加载CIImage,我都得到一个 nil。但是我可以将文件加载到UIImage 并将其转换为CIImage

所以,这行得通:

        let testUIImage = UIImage(named: "image_0001.jpg")!
        let testCIImage = CIImage(image: testUIImage)  // OK

但这不是:

        let testCIImage = CIImage(contentsOf: URL(string: "image_0001.jpg")!)  // returns nil

我做错了什么?是网址吗?

【问题讨论】:

  • URL 应该传达图像的位置而不是图像名称本身
  • UIImage(named: "") 是在资产文件夹中查找图像的快捷方式。 URL(string: "image_0001.jpg") 不是一个有效的 URL 并且不指向同一个东西

标签: ios swift ciimage


【解决方案1】:

如果您的图像在主包中,您需要提供文件 url,然后您可以获得如下代码的 url

guard let url = Bundle.main.url(forResource:"image_0001", withExtension:"jpg") else {
  return 
}
let testCIImage = CIImage(contentsOf: url)

【讨论】:

  • 这个也可以,谢谢。我想接受你和@vadian 的答案,因为它们都是正确的,但显然我不能。我是 swift 的菜鸟,坦率地说,一开始我没有得到你的答案,但我立刻明白了 vadian 的意思,所以他明白了。
【解决方案2】:
  1. UIImage(named: "name.ext") 是一个方便的初始化器。这是一个简短的形式

    guard let url = Bundle.main.url(forResource:"name", withExtension:"ext"),
          let data = try? Data(contentsOf: url),
          let image = UIImage(data: data) else { return nil }
    return image
    
  2. URL(string: 需要一个字符串来表示一个完整 URL,例如以一个方案开头

    URL(string: "https://example.com/path/to/image_0001.jpg")
    

    URL(string: "file:///Users/myuser/path/to/image_0001.jpg")
    

【讨论】:

  • 谢谢,你的回答解决了。我只是给出了错误的网址。图像在文件系统中,使用“位置:相对于组”添加到项目中(我只是从文件管理器中拖放)。为了使 URL 有效,我不仅必须添加“file:///”,而且还必须输入完整的绝对路径:“file:///image_0001.jpg”不起作用,这对我来说是不可理解的因为 UIImage(named: "image_0001.jpg") 有效。
猜你喜欢
  • 2011-12-08
  • 2018-05-29
  • 2012-04-16
  • 2012-02-24
  • 1970-01-01
  • 2021-05-30
  • 2013-01-15
  • 2014-02-19
  • 1970-01-01
相关资源
最近更新 更多