Antiokhos
Antiokhos

Reputation: 3045

How I can dowload GIF image in swift

I am developing some tumblr client. And i want to download all photos in dashboard and save them to documentDirectory. Some of them is jpg some are gif. I have successfully download jpg images with this code:

do {
        let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        let fileURL = documentsURL.appendingPathComponent(fname)
        if let pngImageData = UIImagePNGRepresentation(myImage!) {
            try pngImageData.write(to: fileURL, options: .atomic)
            print(fname + " - saved")
        }
    } catch {print(fname + " - not saved") }

myImage is the image which is downloaded from URL. This code is work for jpg images but not good for gifs.

And lastly i read these files with this:

let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let filePath = documentsURL.appendingPathComponent(fname).path
    if FileManager.default.fileExists(atPath: filePath) {
        return UIImage(contentsOfFile: filePath)!
    }

It's work for jpg but not for gifs. when i try this writing/reading codes on gifs images, i got just image not animation.

Can you show me the way pls with an example will be awesome.

Thank you.

Upvotes: 3

Views: 2734

Answers (4)

eshirima
eshirima

Reputation: 3867

I personally used this tinnie tool for GIFs. Simply add the iOSDevCenters+GIF.swift file directly to your project and use it as shown below

1. Online URL

    let imageURL = UIImage.gifImageWithURL(gifURL)
    let yourImageView = UIImageView(image: imageURL)

2. Local Filename

    let imageName = UIImage.gifImageWithName(imageName)
    let yourImageView = UIImageView(image: imageName)

3. Using Data

    let imageData = NSData(contentsOf: Bundle.main.url(forResource: "name", withExtension: ".gif"))
    let imageData = UIImage.gifImageWithData(imageData)
    let yourImageView = UIImageView(image: imageData)

Upvotes: 5

Andrey Oshev
Andrey Oshev

Reputation: 855

Try this:

#import AssetsLibrary

let lib = ALAssetsLibrary()

let data = NSData(contentsOfURL: getCurrentGIFURL)

lib.writeImageDataToSavedPhotosAlbum(data, metadata: nil) { (url, err) in

    }

Upvotes: 0

Vladyslav Zavalykhatko
Vladyslav Zavalykhatko

Reputation: 17354

I think there is no problem with downloading and you are just trying to present it as a png; instead try to present this saved data with this library, for example

Upvotes: 0

matt
matt

Reputation: 534903

Actually your first code is not working correctly either.

What you are receiving is the image. You do not need or want to translate it into some other kind of image (UIImagePNGRepresentation). Just save the data. Later, read the data directly into a UIImage.

Upvotes: 3

Related Questions