Copy image to clipboard in SwiftUI

In this tutorial, we will see how to copy an image to the clipboard in SwiftUI.

. First of all, we need to convert the image to UIImage (UIKit’s image representation), then convert it to UIPasteboard to place it in the clipboard.

Now, follow the steps below to achieve this task.

Defining the Image

First of all, we need to define an optional UIImage which will hold the image we want to copy to the clipboard.

let image = UIImage(named: "picture")

The above code will load an image named “picture” from the app’s asset catalog that we want to copy to the clipboard.

Displaying the Image

We can display the image using SwiftUI’s Image view. We set the image from the UIImage converted from the previous step, making sure it’s resizable and has a fixed frame size.

Image(uiImage: image ?? UIImage())
    .resizable()
    .frame(width: 200, height: 200)

In the above code, The Image is a SwiftUI view used to display images.

The uiImage parameter initializes the Image view with a UIImage.

Then, the image ?? UIImage() is a nil-coalescing operator (??) that checks if the image variable contains a UIImage. If it does, it uses that image; otherwise, it uses a default empty UIImage().

Copying Image on Tap

We can use an onTapGesture to the Image view to add a tap gesture in the image.

.onTapGesture {
        if let copiedImage = image {
            copyImageToClipboard(image: copiedImage)
        }
    }

In the above code, I have added an onTapGesture to the image view. So, when we tap the Image, it will check if the image exists. If it exists, it will call the copyImageToClipboard function.

Copying Image Function

This function is responsible for the actual copying of the image to the system’s clipboard using UIPasteboard.

func copyImageToClipboard(image: UIImage) {
    let pasteboard = UIPasteboard.general
    pasteboard.image = image
    
    // To check if the image was successfully set in the clipboard.
    if pasteboard.image != nil {
        // If the image is not nil, it means it was successfully copied to the clipboard.
        print("Image copied to clipboard!")
    } else {
        // If the image is nil, print a failure message.
        print("Failed to copy image to clipboard.")
    }
}

In the above code, the UIPasteboard.general property will give access to the system’s general pasteboard, which is used for common copy/paste operations.

The pasteboard.image = image will set the image property of the UIPasteboard to the provided UIImage. This is how the image will be copied to the clipboard.

Here is the complete code below.

import SwiftUI
import UIKit

struct ContentView: View {
    let image = UIImage(named: "picture") // Replace "picture" with your image name

    var body: some View {
        VStack {
            Image(uiImage: image ?? UIImage())
                .resizable()
                .frame(width: 200, height: 200)
                .onTapGesture {
                    if let copiedImage = image {
                        copyImageToClipboard(image: copiedImage)
                    }
                }
        }
    }

    func copyImageToClipboard(image: UIImage) {
        let pasteboard = UIPasteboard.general
        pasteboard.image = image
        
        // To check if the image was successfully set in the clipboard.
        if pasteboard.image != nil {
            // If the image is not nil, it means it was successfully copied to the clipboard.
            print("Image copied to clipboard!")
        } else {
            // If the image is nil, print a failure message.
            print("Failed to copy image to clipboard.")
        }
    }

}

In the above code, I have imported UIKit for interacting with the clipboard (UIImage and UIPasteboard).

Output:

Copy image to clipboard in SwiftUI

Leave a Reply

Your email address will not be published. Required fields are marked *