Ethan Fang
Ethan Fang

Reputation: 1269

Paste gif image into NSPasteboard

I am developing osx application. I want to paste an Gif image into pasteboard. How can I do that?

What I have is

What I want to do is to paste that image into pasteboard. I am able to paste PNG image but what I need is to paste GIF image.


My existing code

let imageURL = imageObject.imageURL!
let fileName = imageURL.lastPathComponent
var saveURL = NSURL(string: "file://" + NSTemporaryDirectory())
saveURL = saveURL?.URLByAppendingPathComponent(fileName!)
// I have data now
let data = NSData(contentsOfURL: imageURL)

pasteboard.declareTypes([NSTIFFPboardType], owner: nil)
pasteboard.setData(data!, forType: "com.compuserve.gif")

Upvotes: 3

Views: 943

Answers (3)

Aaron Vegh
Aaron Vegh

Reputation: 5217

I managed to get this working using the following code:

let pb = NSPasteboard.general
do {
  let fileType = try NSWorkspace.shared.type(ofFile: localPath.path)
  let pasteboardType = NSPasteboard.PasteboardType.init(fileType)
  pb.declareTypes([pasteboardType], owner: nil)
  pb.writeObjects([localPath as NSURL])
} catch {
  return
}

Upvotes: 0

Heinrich Giesen
Heinrich Giesen

Reputation: 521

About 10 years ago same one asked How do I put a GIF onto an NSPasteboard? in an Apple discussion group and here is my answer. Although 10 years old and the NSPasteboard methods changed since that time my answer still works. I confess: my advice is a bit dirty.

Upvotes: 1

Ethan Fang
Ethan Fang

Reputation: 1269

Okay I got it working after spending 6 hours searching online.

Basically I have to download the image file and paste it as a filename.

        let imageURL = imageObject.imageURL!
        let fileName = imageURL.lastPathComponent
        var saveURL = NSURL(string: "file://" + NSTemporaryDirectory())
        saveURL = saveURL?.URLByAppendingPathComponent(fileName!)
        let data = NSData(contentsOfURL: imageURL)
        data?.writeToURL(saveURL!, atomically: true)

        pasteboard.declareTypes([NSFilenamesPboardType], owner: nil)
        pasteboard.writeObjects([saveURL!])

Upvotes: 0

Related Questions