当前位置: 首页 > 面试题库 >

如何从照片库加载GIF动画

陆飞捷
2023-03-14
问题内容

在iOS
Swift中,我很难将动画GIF从设备图片库加载到UIImageView或从中创建.gif文件。如果它是服务器上的文件或正确在应用程序中,则显示动画GIF没问题。但是,当我从照片库中加载它时,会丢失动画。我找到了一些Objective-
C解决方案,并试图将它们转换为Swift,但是没有任何运气。

这是我到目前为止的内容:

@IBAction func buttonTapped(sender: UIButton) {
    selectPhoto()
}

func selectPhoto() {
    let photoLibraryController = UIImagePickerController()
    photoLibraryController.delegate = self
    photoLibraryController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary

    let mediaTypes:[String] = [kUTTypeImage as String]
    photoLibraryController.mediaTypes = mediaTypes
    photoLibraryController.allowsEditing = false

    self.presentViewController(photoLibraryController, animated: true, completion: nil)
}

// UIImagePickerControllerDelegate
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    let origImage = info[UIImagePickerControllerOriginalImage] as! UIImage

    self.imageView.image = origImage

    picker.dismissViewControllerAnimated(true, completion: nil)

}

理想情况下,我想将照片库图像保存到服务器上的gif文件中。从那里,我毫不费力地显示它。但是,我需要一些帮助将照片库中的数据转换为某种类型的属性,而又不会丢失动画。我是否需要使用诸如ALAssetsLibrary之类的东西?

谢谢。


问题答案:

是的,使用ALAssetsLibrary→现在称为PHAsset。

您应该获取gif的NSData,而不是UIImage(因为UIImage仅获取第一帧。)

因此,基本上,您将执行以下操作:

一个你得到的资产

let requestOptions = PHImageRequestOptions()
requestOptions.isSynchronous = true // adjust the parameters as you wish

PHImageManager.default().requestImageData(for: asset, options: requestOptions, resultHandler: { (imageData, UTI, _, _) in
    if let uti = UTI,let data = imageData ,
        // you can also use UTI to make sure it's a gif
       UTTypeConformsTo(uti as CFString, kUTTypeGIF) {
        // save data here
    }
})

资源:PHAsset



 类似资料:
  • 问题内容: 我尝试在我的网站中实施AJAX。单击div changepass的内容时,则应加载changepass.template.php。这是我为此使用的代码。 我的问题是在页面changepass.template.php完全加载时如何显示GIF动画(loading.gif)。请给我一些代码提示。 问题答案: 有很多方法可以做到这一点。一种简单的方法: JS: 詹姆斯·怀斯曼 ( James

  • 问题内容: 我正在尝试从jar文件中存储的动画gif创建ImageIcon。 图像加载,但仅加载动画gif的第一帧。动画不播放。 如果我从文件系统上的文件中加载动画gif,一切都会按预期进行。动画播放所有帧。所以这工作: 如何从jar文件将动画gif加载到ImageIcon中? 编辑:这是一个完整的测试用例,为什么不显示动画? 问题答案: 这从inputStream读取gif动画

  • 我已经尝试了很多,但我能得到的只是第一个图像,而不是动画GIF。 目前最好的解决方案是加载一个动画gif到图标,但我需要文件。代码如下: 这里有人能帮忙吗? 这段代码只获得gif的第一个图像(不是动画):

  • 问题内容: 我需要在活动中获得并显示照片库中最近拍摄的3张照片,而无需任何点击。 完成此步骤后,滚动时,我应该以3 x 3的方式拍摄其他照片。 您知道快速执行此操作的正确方法吗?谢谢。 问题答案: 这是使用适用于iOS 8+设备的框架的解决方案:

  • 问题内容: 我正在为Android编写一个小相框应用程序,它使用opengl作为部分UI。这部分需要从flickr获取图像并将其加载到纹理中。我下面的代码大多数时候都可以使用,但是在从连接获取输入流和对流进行位图解码的位之间,它具有Thread.sleep()缺点: 我如何使用sleep()方法来支持具有逻辑意义的内容? 我正在不在模拟器中的三星银河标签上进行测试 问题答案: 这似乎不太理想,但是

  • 问题内容: 我正在尝试在JLabel中加载动画GIF。 尽管这可行: 另一方面,这不是,我也不想从URL获取GIF,因为我已经有了GIF。加载结果仅显示GIF的第一帧: 我想一定是有原因的,但是我找不到。 谢谢!亚历克斯 问题答案: 您可以尝试像这样加载GIF文件: 或使用,如果你的背景是静态的。