gpt4 book ai didi

ios - 合并两个旋转和缩放的UIImage

转载 作者:行者123 更新时间:2023-12-01 16:58:38 26 4
gpt4 key购买 nike

我正在做一个类似这样的应用程序:您加载一张照片,然后将图像放在上面,例如气球等。

当我尝试仅调整大小而将其中之一合并到图像上时,它工作正常。比应有的像素多10像素,但没有问题。

问题是,当您旋转图像[UIImageView]时,它看起来比图像大得多,我尝试分配所有内容,但没有进行任何操作。我离开了代码。希望有人能帮忙。

注意:图像大小位于UIImageView内部,然后乘以主图像的比例

- (UIImage *)mergeImage:(UIImageView *)mainImage withImageView:(UIImageView *)imageView {

UIImage *temp = imageView.image;
UIImage *tempMain = mainImage.image;

CGFloat mainScale = [self imageViewScaleFactor:mainImage];
CGFloat tempScale = 1/mainScale;
NSLog(@"%f", tempScale);

//Rotate UIIMAGE
UIGraphicsBeginImageContext(temp.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, temp.size.width/2, temp.size.height/2);
CGFloat angle = atan2(imageView.transform.b, imageView.transform.a);
transform = CGAffineTransformRotate(transform, angle);
transform = CGAffineTransformScale(transform, 1.0, -1.0);
CGContextConcatCTM(ctx, transform);
// Draw the image into the context
CGContextDrawImage(ctx, CGRectMake(-temp.size.width/2, -temp.size.height/2, temp.size.width, temp.size.height), temp.CGImage);
// Get an image from the context
temp = [UIImage imageWithCGImage: CGBitmapContextCreateImage(ctx)];


NSLog(@"%f %f %f", mainScale, mainImage.frame.size.width, mainImage.frame.size.height);

UIGraphicsBeginImageContextWithOptions(tempMain.size, NO, 1.0f);

//Get imageView size & position
NSLog(@"%f %f %f %f", imageView.frame.origin.x, imageView.frame.origin.y, imageView.frame.size.width, imageView.frame.size.height);

CGFloat offsetX = 0;
CGFloat offsetY = -44;

if (tempMain.size.height > tempMain.size.width) {
offsetX = ((tempMain.size.width * mainScale) - 320)/2;
}else{
offsetY = ((tempMain.size.height * mainScale) - 416)/2;
offsetY -= 44;
}

CGFloat imageViewX = (imageView.frame.origin.x + offsetX) * tempScale;
CGFloat imageViewY = (imageView.frame.origin.y + offsetY) * tempScale;
CGFloat imageViewW = imageView.frame.size.width * tempScale;
CGFloat imageViewH = imageView.frame.size.height * tempScale;


CGRect tempRect = CGRectMake(imageViewX, imageViewY, imageViewW, imageViewH);


[tempMain drawAtPoint:CGPointZero];
[temp drawInRect:tempRect];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return newImage;
}

谢谢

最佳答案

这是对我有用的解决方案

Merging a previosly rotated by gesture UIImageView with another one. WYS is not WYG

我只是将照片拍摄到主屏幕上,然后将其裁剪为照片的大小,更快,更干净。如果应用程序在正常设备中的视网膜中运行,分辨率还不错。您需要准备该代码才能在视网膜和非视网膜中工作

关于ios - 合并两个旋转和缩放的UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9372968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com