浏览代码

Merge branch 'master' of https://git.yishihui.com/iOS/BFRecordScreenKit

* 'master' of https://git.yishihui.com/iOS/BFRecordScreenKit:
  1.导出裁剪
  1.修改图片缩略图大小为112 * 200
harry 3 年之前
父节点
当前提交
3272606432

+ 3 - 4
BFRecordScreenKit/Classes/BFRecordExport.swift

@@ -349,17 +349,16 @@ public class BFRecordExport {
         if voiceCount > 0 || videoStickers.count > 1 {
             let (audioMix, composition) = mergeAudio(videoStickers: videoStickers, audios: voiceList, synthesisAll: synthesisAll)
 
+            let outputSize: CGSize = CGSize(width: 1080, height: Int(1080 * CGFloat(UIScreen.main.bounds.size.height / UIScreen.main.bounds.size.width)))
+            BFLog(message: "输出视频大小:\(outputSize)")
             var filters: [PQBaseFilter] = Array()
             for sticker in videoStickers {
                 if sticker.type == StickerType.IMAGE.rawValue {
-                    filters.append(PQImageFilter(sticker: sticker))
+                    filters.append(PQImageFilter(sticker: sticker,showUISize: outputSize))
                 } else if sticker.type == StickerType.VIDEO.rawValue {
                     filters.append(PQMovieFilter(movieSticker: sticker))
                 }
             }
-            let outputSize: CGSize = CGSize(width: 1080, height: Int(1080 * CGFloat(UIScreen.main.bounds.size.height / UIScreen.main.bounds.size.width)))
-            BFLog(message: "输出视频大小:\(outputSize)")
-
             // add by ak 有字幕数据 & 显示字幕开关打开 添加字幕filter
             if titleStickers.count > 0, titleStickers.first?.setting.subtitleIsShow ?? true {
                 filters.append(PQSubTitleFilter(st: titleStickers, inputSize: outputSize))

+ 16 - 13
BFRecordScreenKit/Classes/BFRecordItemModel.swift

@@ -28,7 +28,7 @@ public class BFRecordItemModel: NSObject {
     public var videoStickers = [PQEditVisionTrackMaterialsModel]() // 合成导出时计算
     public var imageStickers = [PQEditVisionTrackMaterialsModel]() //
     public var titleStickers = [PQEditSubTitleModel]() // 字幕贴纸
-    
+
     var events = [WithDrawModel]() // 行为记录,方便撤销
 
     public var coverImg: UIImage? // 封面图
@@ -40,16 +40,16 @@ public class BFRecordItemModel: NSObject {
     public var index = 0 // 素材index
     public var width = 0 // 素材宽
     public var height = 0 // 素材高
-    public var videoDegress : UInt = 0  // 视频拍摄角度 90,270为横屏,180,0为竖屏
+    public var videoDegress: UInt = 0 // 视频拍摄角度 90,270为横屏,180,0为竖屏
 
     func initOriginData(phasset: PHAsset) {
         width = phasset.pixelWidth
         height = phasset.pixelHeight
         materialDuraion = phasset.duration
-        
+
         fetchCoverImage(phasset)
         fetchAVUrlAsset(phasset)
-        
+
         if phasset.mediaType == .image {
             mediaType = .IMAGE
             localPath = "image"
@@ -57,7 +57,6 @@ public class BFRecordItemModel: NSObject {
             mediaType = .VIDEO
             fetchPlayItem(phasset)
         }
-
     }
 
     func fetchCoverImage(_ phasset: PHAsset) {
@@ -72,6 +71,11 @@ public class BFRecordItemModel: NSObject {
             // 设置首帧/封面
             if image != nil {
                 self?.coverImg = image
+                if self?.mediaType == .IMAGE {
+                    if let thumImage = image?.nx_scaleToSize(size: CGSize(width: 112, height: 200)) {
+                        self?.thumbImgs.append(thumImage)
+                    }
+                }
                 self?.fetchCoverImgCallBack?(image!)
             }
         }
@@ -89,7 +93,7 @@ public class BFRecordItemModel: NSObject {
     }
 
     public func fetchAVUrlAsset(_ phasset: PHAsset) {
-        PQPHAssetVideoParaseUtil.parasToAVAsset(phAsset: phasset) {[weak self] asset, size, _, _ in
+        PQPHAssetVideoParaseUtil.parasToAVAsset(phAsset: phasset) { [weak self] asset, _, _, _ in
             guard let sself = self else {
                 return
             }
@@ -126,12 +130,12 @@ public class BFRecordItemModel: NSObject {
             dealedDurationRanges.append(SplitRecordRange(isRecord: false, range: range, index: -1))
         }
     }
-    
+
     /// 视频分解成帧
     /// - parameter frames                          : 需要取的帧数
     /// - parameter firstImagesCount             : 获取首先N张连续视频帧后先返回给调用方使用作为缓冲
     /// - parameter splitCompleteClosure    : 回调
-    func splitVideoFileUrlFps(frames: Int, firstImagesCount:Int = 0, maxSize:CGSize = CGSize(width: 200, height: 200), splitCompleteClosure: @escaping ((Bool, [UIImage]) -> Void)) {
+    func splitVideoFileUrlFps(frames: Int, firstImagesCount: Int = 0, maxSize _: CGSize = CGSize(width: 200, height: 200), splitCompleteClosure: @escaping ((Bool, [UIImage]) -> Void)) {
         guard let urlAsset = videoAsset, urlAsset.duration.seconds > 0 else {
             return
         }
@@ -144,7 +148,7 @@ public class BFRecordItemModel: NSObject {
         let start = 0
 //        let end = Int(urlAsset.duration.seconds * Float64(fps))
         let fps = Double(frames) / urlAsset.duration.seconds
-        for i in start..<frames {
+        for i in start ..< frames {
             let timeValue = NSValue(time: CMTimeMake(value: Int64(i * 1000), timescale: Int32(fps * 1000)))
 
             times.append(timeValue)
@@ -170,15 +174,15 @@ public class BFRecordItemModel: NSObject {
             case AVAssetImageGenerator.Result.succeeded:
                 let framImg = UIImage(cgImage: image!)
                 splitImages.append(framImg)
-    //            BFLog(1, message: "aaa: \(requestedTime.seconds) - \(actualTime.seconds)")
+            //            BFLog(1, message: "aaa: \(requestedTime.seconds) - \(actualTime.seconds)")
             @unknown default:
                 break
             }
-            
+
             if cocu == firstImagesCount {
                 splitCompleteClosure(false, splitImages)
             }
-            
+
             if cocu == timesCount { // 最后一帧时 回调赋值
                 splitCompleteClosure(true, splitImages)
                 BFLog(1, message: "splitVideo: complete")
@@ -204,5 +208,4 @@ public class BFRecordItemModel: NSObject {
 
         return cgImg == nil ? nil : UIImage(cgImage: cgImg!)
     }
-
 }

+ 2 - 2
BFRecordScreenKit/Classes/RecordScreen/View/BFVideoThumbProgressView.swift

@@ -156,7 +156,7 @@ class BFVideoThumbProgressView: UIView {
 
     /// 处理图片缩略图
     func dealWithImageThumb() {
-        guard let image = recordItem?.coverImg else {
+        guard let image = (recordItem?.thumbImgs.first ?? recordItem?.coverImg) else {
             addThumbImages(images: [UIImage]())
             return
         }
@@ -207,7 +207,7 @@ class BFVideoThumbProgressView: UIView {
             let count: Int = Int(progress / 2)
             BFLog(message: "需要的图片个数:progress=\(progress),count=\(count)")
             if sslf.recordItem?.mediaType == .IMAGE, (sslf.progressView.contentView.subviews.count - 6) < count {
-                guard let image = sslf.recordItem?.coverImg else {
+                guard let image = (sslf.recordItem?.thumbImgs.first ?? sslf.recordItem?.coverImg) else {
                     return
                 }
                 if sslf.lastImg != nil, sslf.lastImg?.superview != nil {