From e412e21db8da6475aa392542f987a8e723b88f3a Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 28 May 2020 19:31:45 +0300 Subject: [PATCH] Video editor fixes --- .../TGMediaPickerGalleryVideoItemView.m | 6 ++- .../Sources/TGMediaVideoConverter.m | 39 ++++++++++++++----- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItemView.m b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItemView.m index 791c7c66b9..5aa9451df3 100644 --- a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItemView.m +++ b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItemView.m @@ -1451,6 +1451,8 @@ { if (fabs(_scrubberView.trimStartValue - adjustments.trimStartValue) > DBL_EPSILON) { + UIImage *paintingImage = _paintingImageView.image; + [[SQueue concurrentDefaultQueue] dispatch:^ { AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:_player.currentItem.asset]; @@ -1476,8 +1478,8 @@ [image drawInRect:CGRectMake(0, 0, fillSize.width, fillSize.height)]; - if (_paintingImageView.image != nil) - [_paintingImageView.image drawInRect:CGRectMake(0, 0, fillSize.width, fillSize.height)]; + if (paintingImage != nil) + [paintingImage drawInRect:CGRectMake(0, 0, fillSize.width, fillSize.height)]; thumbnailImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); diff --git a/submodules/LegacyComponents/Sources/TGMediaVideoConverter.m b/submodules/LegacyComponents/Sources/TGMediaVideoConverter.m index 461b070444..5462bd4298 100644 --- a/submodules/LegacyComponents/Sources/TGMediaVideoConverter.m +++ b/submodules/LegacyComponents/Sources/TGMediaVideoConverter.m @@ -382,17 +382,36 @@ CIImage *resultImage = request.sourceImage; CGSize size; - CGPoint offset = CGPointZero; + CGPoint finalOffset = CGPointZero; if (backgroundCIImage != nil) { resultImage = backgroundCIImage; - size = backgroundCIImage.extent.size; - } else if ([adjustments cropAppliedForAvatar:false]) { size = resultImage.extent.size; - CGRect cropRect = adjustments.cropRect; - cropRect = CGRectMake(cropRect.origin.x, size.height - cropRect.size.height - cropRect.origin.y, cropRect.size.width, cropRect.size.height); - offset = CGPointMake(cropRect.origin.x, -cropRect.origin.y); + if ([adjustments cropAppliedForAvatar:false]) { + CGRect cropRect = adjustments.cropRect; + CGFloat ratio = resultImage.extent.size.width / cropRect.size.width; + + CGSize extendedSize = CGSizeMake(adjustments.originalSize.width * ratio, adjustments.originalSize.height * ratio); + CIImage *image = [[CIImage alloc] initWithColor:[CIColor colorWithRed:0.0f green:0.0f blue:0.0f]]; + image = [image imageByCroppingToRect:CGRectMake(0.0, 0.0, extendedSize.width, extendedSize.height)]; + + cropRect = CGRectMake(cropRect.origin.x * ratio, (adjustments.originalSize.height - cropRect.size.height - cropRect.origin.y) * ratio, cropRect.size.width * ratio, cropRect.size.height * ratio); + + resultImage = [resultImage imageByApplyingTransform:CGAffineTransformMakeTranslation(cropRect.origin.x, cropRect.origin.y)]; + finalOffset = CGPointMake(-cropRect.origin.x, -cropRect.origin.y); + + image = [resultImage imageByCompositingOverImage:image]; + resultImage = image; + + size = resultImage.extent.size; + } + } else { size = resultImage.extent.size; + if ([adjustments cropAppliedForAvatar:false]) { + CGRect cropRect = adjustments.cropRect; + cropRect = CGRectMake(cropRect.origin.x, adjustments.originalSize.height - cropRect.size.height - cropRect.origin.y, cropRect.size.width, cropRect.size.height); + finalOffset = CGPointMake(-cropRect.origin.x, -cropRect.origin.y); + } } void (^process)(CIImage *, void(^)(void)) = ^(CIImage *resultImage, void(^unlock)(void)) { @@ -411,15 +430,15 @@ for (CIImage *image in images) { mergedImage = [image imageByCompositingOverImage:mergedImage]; } - if (!CGPointEqualToPoint(offset, CGPointZero)) { - mergedImage = [mergedImage imageByApplyingTransform:CGAffineTransformMakeTranslation(offset.x, offset.y)]; + if (!CGPointEqualToPoint(finalOffset, CGPointZero)) { + mergedImage = [mergedImage imageByApplyingTransform:CGAffineTransformMakeTranslation(finalOffset.x, finalOffset.y)]; } [request finishWithImage:mergedImage context:ciContext]; unlock(); }]; } else { - if (!CGPointEqualToPoint(offset, CGPointZero)) { - resultImage = [resultImage imageByApplyingTransform:CGAffineTransformMakeTranslation(offset.x, offset.y)]; + if (!CGPointEqualToPoint(finalOffset, CGPointZero)) { + resultImage = [resultImage imageByApplyingTransform:CGAffineTransformMakeTranslation(finalOffset.x, finalOffset.y)]; } [request finishWithImage:resultImage context:ciContext]; unlock();