ios - 保存带有动画 gif 的图像

标签 ios swift uiimage gif

我正在创建一个类似 instagram 的功能,您可以在其中添加可拖动的文本、贴纸和 gif。 我可以添加文字和贴纸并通过截图保存。

有没有一种方法可以保存添加了动画 gif 的图像。

有人可以提出解决方案吗?

谢谢。

最佳答案

你好,我用下面的方法实现了这个,我希望它对某人有帮助

1.在图像上放置 gif 后,我通过这种方法使用计时器截取 holderView 的屏幕截图。

@objc func gifScreenShot() {
      guard let imageView = self.screenView else {
         return
      }

      UIGraphicsBeginImageContextWithOptions(imageView.frame.size, true, 0.0)
      imageView.drawHierarchy(in: imageView.bounds, afterScreenUpdates: true)
      let image = UIGraphicsGetImageFromCurrentImageContext()
      UIGraphicsEndImageContext()
      self.gifImages.append(image!)

      if gifImages.count == 50 {
         self.stopTimer()
      }
   }

2.截图50次后,我停止计时

   func stopTimer() {
      if gifTimer != nil {
         gifTimer!.invalidate()
         gifTimer = nil
         DispatchQueue.global(qos: .background).async {
            DispatchQueue.main.async {
               self.createVideo()
            }
         }
      }
   }

3.并将所有截图组合成0.05秒的视频并保存为照片库

   func createVideo()  {
      let settings = CXEImagesToVideo.videoSettings(codec: AVVideoCodecType.h264.rawValue, width: (gifImages[0].cgImage?.width)!, height: (gifImages[0].cgImage?.height)!)
      let movieMaker = CXEImagesToVideo(videoSettings: settings)
      movieMaker.createMovieFrom(images: gifImages){ (fileURL:URL) in
         if self.isSaveVideo {
            PHPhotoLibrary.shared().performChanges({
               PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: fileURL)
            }) { saved, error in
               self.loadingViewStop()
               self.gifImages.removeAll()
               if saved {
                  self.gifImages.removeAll()
                  DispatchQueue.main.async {
                     self.view.toastMessage("Video saved successfully".localized)
                  }
               } else {
                  print(error)
               }
            }
         } else {
            self.gifImages.removeAll()
            self.videoFileURL = fileURL
            self.nextTapped(snap: nil)
         }
      }
   }

一切如我所愿

关于ios - 保存带有动画 gif 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55259825/

相关文章:

c# - Objective C 到 C#(图像裁剪代码)

ios - 页面滚动在启用自动布局的情况下不起作用

ios - NavigationController nil with Material

ios - 如何快速从字符串中删除特定字符或单词?

ios - 显示用户位置按钮 - Swift

iphone - (iphone)快速 UIImage 合成(合并)?

javascript - 如何检查 iOS gui 自动化中的元素属性?

javascript - 返回多个组件会导致 libART 错误

swift - UIImageJPEGRepresentation 是如何工作的?

IOS tableview 在下载新图像问题时重用旧图像