Video editor fixes

This commit is contained in:
Ilya Laktyushin 2020-05-28 19:31:45 +03:00
parent be8086b3d5
commit e412e21db8
2 changed files with 33 additions and 12 deletions

View File

@ -1451,6 +1451,8 @@
{ {
if (fabs(_scrubberView.trimStartValue - adjustments.trimStartValue) > DBL_EPSILON) if (fabs(_scrubberView.trimStartValue - adjustments.trimStartValue) > DBL_EPSILON)
{ {
UIImage *paintingImage = _paintingImageView.image;
[[SQueue concurrentDefaultQueue] dispatch:^ [[SQueue concurrentDefaultQueue] dispatch:^
{ {
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:_player.currentItem.asset]; AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:_player.currentItem.asset];
@ -1476,8 +1478,8 @@
[image drawInRect:CGRectMake(0, 0, fillSize.width, fillSize.height)]; [image drawInRect:CGRectMake(0, 0, fillSize.width, fillSize.height)];
if (_paintingImageView.image != nil) if (paintingImage != nil)
[_paintingImageView.image drawInRect:CGRectMake(0, 0, fillSize.width, fillSize.height)]; [paintingImage drawInRect:CGRectMake(0, 0, fillSize.width, fillSize.height)];
thumbnailImage = UIGraphicsGetImageFromCurrentImageContext(); thumbnailImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); UIGraphicsEndImageContext();

View File

@ -382,17 +382,36 @@
CIImage *resultImage = request.sourceImage; CIImage *resultImage = request.sourceImage;
CGSize size; CGSize size;
CGPoint offset = CGPointZero; CGPoint finalOffset = CGPointZero;
if (backgroundCIImage != nil) { if (backgroundCIImage != nil) {
resultImage = backgroundCIImage; resultImage = backgroundCIImage;
size = backgroundCIImage.extent.size;
} else if ([adjustments cropAppliedForAvatar:false]) {
size = resultImage.extent.size; size = resultImage.extent.size;
if ([adjustments cropAppliedForAvatar:false]) {
CGRect cropRect = adjustments.cropRect; CGRect cropRect = adjustments.cropRect;
cropRect = CGRectMake(cropRect.origin.x, size.height - cropRect.size.height - cropRect.origin.y, cropRect.size.width, cropRect.size.height); CGFloat ratio = resultImage.extent.size.width / cropRect.size.width;
offset = CGPointMake(cropRect.origin.x, -cropRect.origin.y);
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 { } else {
size = resultImage.extent.size; 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)) { void (^process)(CIImage *, void(^)(void)) = ^(CIImage *resultImage, void(^unlock)(void)) {
@ -411,15 +430,15 @@
for (CIImage *image in images) { for (CIImage *image in images) {
mergedImage = [image imageByCompositingOverImage:mergedImage]; mergedImage = [image imageByCompositingOverImage:mergedImage];
} }
if (!CGPointEqualToPoint(offset, CGPointZero)) { if (!CGPointEqualToPoint(finalOffset, CGPointZero)) {
mergedImage = [mergedImage imageByApplyingTransform:CGAffineTransformMakeTranslation(offset.x, offset.y)]; mergedImage = [mergedImage imageByApplyingTransform:CGAffineTransformMakeTranslation(finalOffset.x, finalOffset.y)];
} }
[request finishWithImage:mergedImage context:ciContext]; [request finishWithImage:mergedImage context:ciContext];
unlock(); unlock();
}]; }];
} else { } else {
if (!CGPointEqualToPoint(offset, CGPointZero)) { if (!CGPointEqualToPoint(finalOffset, CGPointZero)) {
resultImage = [resultImage imageByApplyingTransform:CGAffineTransformMakeTranslation(offset.x, offset.y)]; resultImage = [resultImage imageByApplyingTransform:CGAffineTransformMakeTranslation(finalOffset.x, finalOffset.y)];
} }
[request finishWithImage:resultImage context:ciContext]; [request finishWithImage:resultImage context:ciContext];
unlock(); unlock();