gpt4 book ai didi

swift - 我们可以从 LinkPresentation 框架中的 LPLinkView 中提取图像吗?

转载 作者:行者123 更新时间:2023-12-03 09:23:51 25 4
gpt4 key购买 nike

我想在我的应用程序中显示一个丰富的链接,并将这些数据发送到我的服务器。
我需要访问 LPLinkView View 中的图像.

如何访问其中的参数? (例如:图像、描述、标题、图标和扩展...)

LPLinkView of URL swift

最佳答案

不幸的是,您无法访问 LPLinkView 的任何内部属性。 ,但您可以轻松创建自己的 View 。 LPLinkMetadata对象有你需要的一切,你只需要知道如何从它的 iconProvider 中提取图像和 imageProvider ,它们是 NSItemProvider 的子类.

UIKit (iOS)

您可以使用 NSItemProvdierloadObject(ofClass:)轻松获得 UIImage 的方法.这是因为 UIImage符合NSItemProviderReading协议(protocol)。

import LinkPresentation
import UIKit

let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

let url = URL(string: "https://stackoverflow.com/q/61286308/2101447")!

LPMetadataProvider().startFetchingMetadata(for: url) { (linkMetadata, error) in
guard let linkMetadata = linkMetadata, let imageProvider = linkMetadata.iconProvider else { return }

print(linkMetadata.title ?? "Untitled")

imageProvider.loadObject(ofClass: UIImage.self) { (image, error) in
guard error == nil else {
// handle error
return
}

if let image = image as? UIImage {
// do something with image
DispatchQueue.main.async {
imageView.image = image
}
} else {
print("no image available")
}
}
}

SwiftUI

SwiftUI 的 Imagestruct , 所以它不能符合 NSItemProviderReading .使用上面的 UIKit 代码最容易获得 UIImage并实例化一个 SwiftUI Image从此。

...

if let uiImage = loadedImage as? UIImage {
let image = Image(uiImage: uiImage)
}

应用程序套件 (macOS)

不同于它的 UIImage姐姐, NSImage不符合 NSItemProviderReading ,这意味着您必须使用 NSItemProvdier的老 loadItem(forTypeIdentifier:options:)方法。

您需要指定 typeIdentifier并初始化 NSImage来自 Data你自己,但除此之外它几乎是一样的。

import CoreServices // may be necessary for kUTTypeImage 
import LinkPresentation
import AppKit

let imageView = NSImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

let url = URL(string: "https://stackoverflow.com/q/61286308/2101447")!

LPMetadataProvider().startFetchingMetadata(for: url) { (linkMetadata, error) in
guard let linkMetadata = linkMetadata, let imageProvider = linkMetadata.iconProvider else { return }

print(linkMetadata.title ?? "Untitled")

imageProvider.loadItem(forTypeIdentifier: kUTTypeImage as String, options: nil) { (data, error) in
guard error == nil else {
// handle error
return
}
guard let data = data as? Data else {
print("no image available")
return
}
if let image = NSImage(data: data) {
// do something with image
DispatchQueue.main.async {
self.imageView.image = image
}
} else {
print("no image available")
}
}
}

关于swift - 我们可以从 LinkPresentation 框架中的 LPLinkView 中提取图像吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61286308/

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