Various improvements

This commit is contained in:
Ilya Laktyushin
2025-01-23 01:37:20 +04:00
parent a2607093bd
commit d1eec8686f
10 changed files with 160 additions and 74 deletions

View File

@@ -228,8 +228,8 @@ public func makeEditorImageComposition(context: CIContext, postbox: Postbox, inp
maskImage = roundedCornersMaskImage(size: CGSize(width: floor(1080.0 * 0.97), height: floor(1080.0 * 0.97)))
} else if values.isAvatar {
maskImage = rectangleMaskImage(size: CGSize(width: floor(1080.0 * 0.97), height: floor(1080.0 * 0.97)))
} else if let _ = outputDimensions {
maskImage = rectangleMaskImage(size: CGSize(width: 1080.0, height: 1080.0))
} else if let outputDimensions {
maskImage = rectangleMaskImage(size: outputDimensions.aspectFitted(CGSize(width: 1080.0, height: 1080.0)))
}
if let drawing = values.drawing, let image = CIImage(image: drawing, options: [.colorSpace: colorSpace]) {
@@ -241,7 +241,7 @@ public func makeEditorImageComposition(context: CIContext, postbox: Postbox, inp
entities.append(contentsOf: composerEntitiesForDrawingEntity(postbox: postbox, textScale: textScale, entity: entity.entity, colorSpace: colorSpace))
}
makeEditorImageFrameComposition(context: context, inputImage: inputImage, drawingImage: drawingImage, maskImage: maskImage, dimensions: dimensions, values: values, entities: entities, time: time, textScale: textScale, completion: { compositedImage in
makeEditorImageFrameComposition(context: context, inputImage: inputImage, drawingImage: drawingImage, maskImage: maskImage, dimensions: dimensions, outputDimensions: outputDimensions, values: values, entities: entities, time: time, textScale: textScale, completion: { compositedImage in
if var compositedImage {
let outputDimensions = outputDimensions ?? dimensions
let scale = outputDimensions.width / compositedImage.extent.width
@@ -258,7 +258,7 @@ public func makeEditorImageComposition(context: CIContext, postbox: Postbox, inp
})
}
private func makeEditorImageFrameComposition(context: CIContext, inputImage: CIImage, drawingImage: CIImage?, maskImage: CIImage?, dimensions: CGSize, values: MediaEditorValues, entities: [MediaEditorComposerEntity], time: CMTime, textScale: CGFloat = 1.0, completion: @escaping (CIImage?) -> Void) {
private func makeEditorImageFrameComposition(context: CIContext, inputImage: CIImage, drawingImage: CIImage?, maskImage: CIImage?, dimensions: CGSize, outputDimensions: CGSize? = nil, values: MediaEditorValues, entities: [MediaEditorComposerEntity], time: CMTime, textScale: CGFloat = 1.0, completion: @escaping (CIImage?) -> Void) {
var isClear = false
if let gradientColor = values.gradientColors?.first, gradientColor.alpha.isZero {
isClear = true
@@ -268,7 +268,7 @@ private func makeEditorImageFrameComposition(context: CIContext, inputImage: CII
var mediaImage = inputImage.samplingLinear().transformed(by: CGAffineTransform(translationX: -inputImage.extent.midX, y: -inputImage.extent.midY))
if values.isStory || values.isSticker || values.isAvatar {
if values.isStory || values.isSticker || values.isAvatar || values.isCover {
resultImage = mediaImage.samplingLinear().composited(over: resultImage)
} else {
let initialScale = dimensions.width / mediaImage.extent.width
@@ -303,6 +303,10 @@ private func makeEditorImageFrameComposition(context: CIContext, inputImage: CII
let minSize = min(dimensions.width, dimensions.height)
let scaledSize = CGSize(width: floor(minSize * 0.97), height: floor(minSize * 0.97))
resultImage = resultImage.transformed(by: CGAffineTransform(translationX: -(dimensions.width - scaledSize.width) / 2.0, y: -(dimensions.height - scaledSize.height) / 2.0)).cropped(to: CGRect(origin: .zero, size: scaledSize))
} else if values.isCover, let outputDimensions {
let minSize = min(dimensions.width, dimensions.height)
let scaledSize = outputDimensions.aspectFitted(CGSize(width: minSize, height: minSize))
resultImage = resultImage.transformed(by: CGAffineTransform(translationX: -(dimensions.width - scaledSize.width) / 2.0, y: -(dimensions.height - scaledSize.height) / 2.0)).cropped(to: CGRect(origin: .zero, size: scaledSize))
} else if values.isStory {
resultImage = resultImage.cropped(to: CGRect(origin: .zero, size: dimensions))
} else {