gpt4 book ai didi

ios - 如何在不改变原始宽高比的情况下组合两个不同大小的 UIImages?

转载 作者:行者123 更新时间:2023-11-28 18:20:38 27 4
gpt4 key购买 nike

我目前组合 UIImages 的方法来自这个 answer在 SO 上,以及 this关于按宽高比调整 UIImage 大小的热门问题。我当前的问题如下:

我有一个名为 pictureImage 的 UIImage,它是用标准尺寸 2448*3264 相机拍摄的。我还有一个名为 self.annotateView 的 UIImageView,它有一个 320*568 框架,用户可以在其中绘制和注释图片。当我在 UIImageView 中显示 pictureImage 时,我将图像显示设置为 Aspect Fill 以便它占据整个 iPhone 屏幕。当然,这意味着 pictureImage 的部分内容在左右两边都被截断了(实际上两边都是 304 像素),但这是有意为之的。

我的问题是,当我将 UIImages pictureImageannotateView.image 组合到一个新的 320*568 维度时,我的组合图像通过水平拉伸(stretch)改变 annotateView.image 的原始方面。这很奇怪,因为新尺寸恰好是 annotateView.image 的原始尺寸。

结果是这样的——

在组合 UIImages 之前

enter image description here

合并图像后

enter image description here

注意下面的图片没有被拉伸(stretch)。但是,annotateView.image 仅在水平方向而非垂直方向拉伸(stretch)。

这是我合并 UIImage 的代码。

//Note: self.firstTakenImage is set to 320*568

CGSize newSize = CGSizeMake(self.firstTakenImage.frame.size.width, self.firstTakenImage.frame.size.height);
UIGraphicsBeginImageContext(newSize);
[self.firstTakenImage.image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
[self.drawView.image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *combinedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

最佳答案

在执行 drawInRect 时,您必须重新执行系统使用 AspectFill 为您执行的缩放和居中操作,以使其与原始过程相匹配。像这样:

CGSize fullSize = self.pictureView.image.size;
CGSize newSize = self.outputView.frame.size;
CGFloat scale = newSize.height/fullSize.height;
CGFloat offset = (newSize.width - fullSize.width*scale)/2;
CGRect offsetRect = CGRectMake(offset, 0, newSize.width-offset*2, newSize.height);
NSLog(@"offset = %@",NSStringFromCGRect(offsetRect));

UIGraphicsBeginImageContext(newSize);
[self.pictureView.image drawInRect:offsetRect];
[self.annotateView.image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage *combImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

self.outputView.image = combImage;

关于ios - 如何在不改变原始宽高比的情况下组合两个不同大小的 UIImages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21366467/

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