保存带有动画 gif 的图像
Posted
技术标签:
【中文标题】保存带有动画 gif 的图像【英文标题】:Save Image with animated gif placed on it 【发布时间】:2019-08-11 02:11:55 【问题描述】:我正在创建一个类似 instagram 的功能,您可以在其中添加可拖动的文本、贴纸和 gif。 我可以添加文字和贴纸并通过截屏保存。
有没有办法保存添加了动画 gif 的图像。
有人可以提出解决方案吗?
谢谢。
【问题讨论】:
请具体说明您想要实现的目标以及您遇到的困难?你想在设备上保存 gif 吗?还是只是它的静态版本? 是的,想在设备上保存 gif。不是静态的。 @Caleb 嗨,它仍然相关吗?如果是这样 - 请您指定,您是想仅在您的应用内使用创建的动画,还是要将其保存到照片库? 【参考方案1】:您好,我使用以下方法实现了这一点,希望对某人有所帮助
1.在Image上放置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)
效果和我预期的一样
【讨论】:
你可以在***.com/a/41159403/4442254找到CXEImagesToVideo
类
计时器从哪里开始?以上是关于保存带有动画 gif 的图像的主要内容,如果未能解决你的问题,请参考以下文章
如何从 R 中的 animate 函数中保存 GIF 图像?
JFrame 绘制带有 alpha 通道的动画 gif 图像