我正在尝试使用 Swift 4 将多个 NSImage 复制到粘贴板 - 如下所示:
private func putItemsOnPasteboard (_ items: [Int]) {
if let images = mainImageController?.getNSImages(for: items) {
NSPasteboard.general.clearContents()
NSPasteboard.general.writeObjects(images)
if let c = NSPasteboard.general.pasteboardItems?.count {
print (c)
}
}
}
NSImage 实现了 NSPasteboardWriting,并且工作正常。问题是,如果我随后粘贴到 Mail 中,它只会粘贴第一张图片,我正在努力找出原因。
例如,如果我用三个图像调用该函数,它似乎都有效,并且我的诊断“print (c)”正确显示“3”。但是如果我粘贴到 Mail(或 OneNote 等)中,它只会粘贴第一张图片。
我知道 Mail 支持粘贴多张图片,因为我可以在 Apple Photos 中选择三个缩略图,将它们复制到粘贴板,然后它会正确地将所有三个粘贴到 Mail 中。
任何线索将不胜感激!
最佳答案
如果我在照片中复制一组照片,然后检查粘贴板类型,我得到:
import Cocoa
print(NSPasteboard.general.types?.map { $0.rawValue } ?? [])
输出:
["dyn.ah62d4rv4gu8ywyc2nbu1g7dfqm10c6xekr1067dwr70g23pw", "IPXPasteboardController", "com.apple.PhotoPrintProduct.photoUUID", "public.file-url", "CorePasteboardFlavorType 0x6675726C", "dyn.ah62d4rv4gu8y6y4grf0gn5xbrzw1gydcr7u1e3cytf2gn", "NSFilenamesPboardType", "dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu", "Apple URL pasteboard type"]
在这些类型中,我觉得很有趣的是 public.file-url
,这表明照片正在将一组 URL 复制到粘贴板上。让我们来检验这个假设:
import Cocoa
print(NSPasteboard.general.readObjects(forClasses: [NSURL.self], options: nil) ?? [])
输出:
[file:///Users/*deleted*/Pictures/Photos%20Library.photoslibrary/resources/proxies/derivatives/1e/00/1e03/UNADJUSTEDNONRAW_thumb_1e03.jpg, file:///Users/*deleted*/Pictures/Photos%20Library.photoslibrary/resources/proxies/derivatives/1e/00/1e04/UNADJUSTEDNONRAW_thumb_1e04.jpg, file:///Users/*deleted*/Pictures/Photos%20Library.photoslibrary/resources/proxies/derivatives/1e/00/1e05/kOBCUhzGRcyeVfBCC8VfvQ_thumb_1e05.jpg]
输出是 JPEG 文件的 URL 列表,表明照片确实提供了 URL 列表并将它们放在粘贴板上。因此,也许您可以将 NSImage
的 TIFF 表示形式保存到一个临时位置,然后将这些临时文件的 URL 写入粘贴板,这样就可以了。
关于swift - 复制多个 NSImage 到 NSPasteboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49061858/