Browse Source

fix: 创意模板,修复老虎机模板实现#trello(【创意模板-老虎机】应该是把一个照片切成三份,而不是把一个照片复制成三张生成的效果)

Melody 4 years ago
parent
commit
57524dd407

+ 37 - 1
SuperShow/OJAGPUImageDecoder/Input/OJAImageFrameInput.swift

@@ -29,7 +29,7 @@ class OJAImageFrameInput: NSObject {
         super.init()
     }
 
-    init(templateItem: OJATemplateItemModel) {
+    init(templateItem: OJATemplateItemModel, fatherItem: OJATemplateItemModel? = nil) {
         self.templateItem = templateItem
         var image = kWSSTemplateAddVideoPlaceholderImage
 
@@ -60,6 +60,42 @@ class OJAImageFrameInput: NSObject {
         //        if let temp = resultImage.oja_imageByResize(to: CGSize(width: 540, height: 960), contentMode: .scaleAspectFill) {
         //            resultImage = temp
         //        }
+
+        // 图片裁剪处理 fix: 补充创意模板 如 老虎机 使用 templateItemModel 里面的 comps 参数,还需要用到 x y 的中心点 父类的宽高进行 处理裁剪素材
+        if let superItem = fatherItem {
+            let boundsSize = CGSize(width: superItem.w, height: superItem.h)
+            let identifyRect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
+
+            let centerPoint = CGPoint(x: templateItem.x, y: templateItem.y)
+            let offsetX = -(centerPoint.x - templateItem.w * 0.5)
+            let offsetY = (centerPoint.y - templateItem.h * 0.5)
+
+            let cropRect = CGRect(x: offsetX / templateItem.w,
+                                  y: offsetY / templateItem.h,
+                                  width: boundsSize.width / templateItem.w,
+                                  height: boundsSize.height / templateItem.h)
+
+            WSSSimpleLog("=========>croprect:\(cropRect)")
+            if identifyRect != cropRect {
+                let semaphore = DispatchSemaphore(value: 0)
+                DispatchQueue.main.async {
+                    let imageSizeW = image.size.width
+                    let imageSizeH = image.size.height
+                    let realRect = CGRect(x: cropRect.origin.x * imageSizeW,
+                                          y: cropRect.origin.y * imageSizeH,
+                                          width: cropRect.size.width * imageSizeW,
+                                          height: cropRect.size.height * imageSizeH)
+                    if let cropImage = image.oja_imageByCrop(to: realRect) {
+                        image = cropImage
+                        semaphore.signal()
+                    } else {
+                        semaphore.signal()
+                    }
+                }
+                semaphore.wait()
+            }
+        }
+
         pictureFile = OJAImagePicture(image: image)
         pictureFile.processImageFrame(at: CMTime.zero)
         super.init()

+ 3 - 3
SuperShow/OJAGPUImageDecoder/Input/OJAPreCompositionFrameInput.swift

@@ -27,13 +27,13 @@ class OJAPreCompositionFrameInput: OJAFrameInput {
         self.templateItem = templateItem
         if let items = templateItem.comps {
             if items.count == 1 {
-                pictureInput = OJAImageFrameInput(templateItem: items[0])
+                pictureInput = OJAImageFrameInput(templateItem: items[0], fatherItem: templateItem)
             } else {
                 for item in templateItem.comps! {
                     if item.type == .videoCover {
-                        pictureInput = OJAImageFrameInput(templateItem: item)
+                        pictureInput = OJAImageFrameInput(templateItem: item, fatherItem: templateItem)
                     } else if item.type == .image {
-                        maskInput = OJAImageFrameInput(templateItem: item)
+                        maskInput = OJAImageFrameInput(templateItem: item, fatherItem: templateItem)
                     }
                 }
                 let blendFilter = OJAImageMaskBlendFilter()