猿问

UIImage:调整大小,然后裁剪

UIImage:调整大小,然后裁剪

我已经对这张脸猛击了好几天,尽管我一直觉得自己正处在启示录的边缘,但我根本无法实现我的目标。

我认为,在我设计的概念阶段之前,从iPhone的相机或库中获取图像,将其缩小到指定的高度,使用与侧面填充选项UIImageView(完全在代码中),然后割掉任何不符合通过的CGRect的内容。

从相机或图书馆获取原始图像是微不足道的。事实证明,其他两个步骤是多么困难,我对此感到震惊。

附图显示了我想要达到的目标。有人能帮我握住我的手吗?到目前为止,我发现的每一个代码示例似乎都会破坏图像,使之颠倒,看起来像垃圾,超出界限,否则就不能正常工作。


侃侃尔雅
浏览 666回答 3
3回答

富国沪深

我需要同样的东西-在我的例子中,选择适合的尺寸,一旦缩放,然后裁剪每一端,以适应其余的宽度。(我的工作是景观,所以可能没有注意到肖像模式的任何缺陷。)这是我的代码-这是UIImage上的一部份。我的代码中的目标大小总是设置为设备的全屏大小。@implementation&nbsp;UIImage&nbsp;(Extras)#pragma&nbsp;mark&nbsp;-#pragma&nbsp;mark&nbsp;Scale&nbsp;and&nbsp;crop&nbsp;image-&nbsp;(UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize{ &nbsp;&nbsp;&nbsp;&nbsp;UIImage&nbsp;*sourceImage&nbsp;=&nbsp;self; &nbsp;&nbsp;&nbsp;&nbsp;UIImage&nbsp;*newImage&nbsp;=&nbsp;nil;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;CGSize&nbsp;imageSize&nbsp;=&nbsp;sourceImage.size; &nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;width&nbsp;=&nbsp;imageSize.width; &nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;height&nbsp;=&nbsp;imageSize.height; &nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;targetWidth&nbsp;=&nbsp;targetSize.width; &nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;targetHeight&nbsp;=&nbsp;targetSize.height; &nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;scaleFactor&nbsp;=&nbsp;0.0; &nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;scaledWidth&nbsp;=&nbsp;targetWidth; &nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;scaledHeight&nbsp;=&nbsp;targetHeight; &nbsp;&nbsp;&nbsp;&nbsp;CGPoint&nbsp;thumbnailPoint&nbsp;=&nbsp;CGPointMake(0.0,0.0); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(CGSizeEqualToSize(imageSize,&nbsp;targetSize)&nbsp;==&nbsp;NO)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;widthFactor&nbsp;=&nbsp;targetWidth&nbsp;/&nbsp;width; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;heightFactor&nbsp;=&nbsp;targetHeight&nbsp;/&nbsp;height; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(widthFactor&nbsp;>&nbsp;heightFactor)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaleFactor&nbsp;=&nbsp;widthFactor;&nbsp;//&nbsp;scale&nbsp;to&nbsp;fit&nbsp;height &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaleFactor&nbsp;=&nbsp;heightFactor;&nbsp;//&nbsp;scale&nbsp;to&nbsp;fit&nbsp;width &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaledWidth&nbsp;&nbsp;=&nbsp;width&nbsp;*&nbsp;scaleFactor; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaledHeight&nbsp;=&nbsp;height&nbsp;*&nbsp;scaleFactor; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;center&nbsp;the&nbsp;image &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(widthFactor&nbsp;>&nbsp;heightFactor) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thumbnailPoint.y&nbsp;=&nbsp;(targetHeight&nbsp;-&nbsp;scaledHeight)&nbsp;*&nbsp;0.5;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(widthFactor&nbsp;<&nbsp;heightFactor) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thumbnailPoint.x&nbsp;=&nbsp;(targetWidth&nbsp;-&nbsp;scaledWidth)&nbsp;*&nbsp;0.5; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;UIGraphicsBeginImageContext(targetSize);&nbsp;//&nbsp;this&nbsp;will&nbsp;crop &nbsp;&nbsp;&nbsp;&nbsp;CGRect&nbsp;thumbnailRect&nbsp;=&nbsp;CGRectZero; &nbsp;&nbsp;&nbsp;&nbsp;thumbnailRect.origin&nbsp;=&nbsp;thumbnailPoint; &nbsp;&nbsp;&nbsp;&nbsp;thumbnailRect.size.width&nbsp;&nbsp;=&nbsp;scaledWidth; &nbsp;&nbsp;&nbsp;&nbsp;thumbnailRect.size.height&nbsp;=&nbsp;scaledHeight; &nbsp;&nbsp;&nbsp;&nbsp;[sourceImage&nbsp;drawInRect:thumbnailRect]; &nbsp;&nbsp;&nbsp;&nbsp;newImage&nbsp;=&nbsp;UIGraphicsGetImageFromCurrentImageContext(); &nbsp;&nbsp;&nbsp;&nbsp;if(newImage&nbsp;==&nbsp;nil) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"could&nbsp;not&nbsp;scale&nbsp;image"); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//pop&nbsp;the&nbsp;context&nbsp;to&nbsp;get&nbsp;back&nbsp;to&nbsp;the&nbsp;default &nbsp;&nbsp;&nbsp;&nbsp;UIGraphicsEndImageContext(); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;newImage;}

沧海一幻觉

旧的帖子包含用于调整UIImage大小的方法的代码。有关部分如下:+&nbsp;(UIImage*)imageWithImage:(UIImage*)image&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaledToSize:(CGSize)newSize;{ &nbsp;&nbsp;&nbsp;UIGraphicsBeginImageContext(&nbsp;newSize&nbsp;); &nbsp;&nbsp;&nbsp;[image&nbsp;drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; &nbsp;&nbsp;&nbsp;UIImage*&nbsp;newImage&nbsp;=&nbsp;UIGraphicsGetImageFromCurrentImageContext(); &nbsp;&nbsp;&nbsp;UIGraphicsEndImageContext(); &nbsp;&nbsp;&nbsp;return&nbsp;newImage;}至于裁剪,我认为如果您改变方法来使用与上下文不同的缩放大小,那么您的结果图像应该被裁剪到上下文的边界上。

幕布斯7119047

+&nbsp;(UIImage&nbsp;*)scaleImage:(UIImage&nbsp;*)image&nbsp;toSize:(CGSize)targetSize&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//If&nbsp;scaleFactor&nbsp;is&nbsp;not&nbsp;touched,&nbsp;no&nbsp;scaling&nbsp;will&nbsp;occur&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;scaleFactor&nbsp;=&nbsp;1.0; &nbsp;&nbsp;&nbsp;&nbsp;//Deciding&nbsp;which&nbsp;factor&nbsp;to&nbsp;use&nbsp;to&nbsp;scale&nbsp;the&nbsp;image&nbsp;(factor&nbsp;=&nbsp;targetSize&nbsp;/&nbsp;imageSize) &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(image.size.width&nbsp;>&nbsp;targetSize.width&nbsp;||&nbsp;image.size.height&nbsp;>&nbsp;targetSize.height) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!((scaleFactor&nbsp;=&nbsp;(targetSize.width&nbsp;/&nbsp;image.size.width))&nbsp;>&nbsp;(targetSize.height&nbsp;/&nbsp;image.size.height)))&nbsp;//scale&nbsp;to&nbsp;fit&nbsp;width,&nbsp;or &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaleFactor&nbsp;=&nbsp;targetSize.height&nbsp;/&nbsp;image.size.height;&nbsp;//&nbsp;scale&nbsp;to&nbsp;fit&nbsp;heigth. &nbsp;&nbsp;&nbsp;&nbsp;UIGraphicsBeginImageContext(targetSize);&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;//Creating&nbsp;the&nbsp;rect&nbsp;where&nbsp;the&nbsp;scaled&nbsp;image&nbsp;is&nbsp;drawn&nbsp;in &nbsp;&nbsp;&nbsp;&nbsp;CGRect&nbsp;rect&nbsp;=&nbsp;CGRectMake((targetSize.width&nbsp;-&nbsp;image.size.width&nbsp;*&nbsp;scaleFactor)&nbsp;/&nbsp;2, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(targetSize.height&nbsp;-&nbsp;&nbsp;image.size.height&nbsp;*&nbsp;scaleFactor)&nbsp;/&nbsp;2, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image.size.width&nbsp;*&nbsp;scaleFactor,&nbsp;image.size.height&nbsp;*&nbsp;scaleFactor); &nbsp;&nbsp;&nbsp;&nbsp;//Draw&nbsp;the&nbsp;image&nbsp;into&nbsp;the&nbsp;rect &nbsp;&nbsp;&nbsp;&nbsp;[image&nbsp;drawInRect:rect]; &nbsp;&nbsp;&nbsp;&nbsp;//Saving&nbsp;the&nbsp;image,&nbsp;ending&nbsp;image&nbsp;context &nbsp;&nbsp;&nbsp;&nbsp;UIImage&nbsp;*scaledImage&nbsp;=&nbsp;UIGraphicsGetImageFromCurrentImageContext(); &nbsp;&nbsp;&nbsp;&nbsp;UIGraphicsEndImageContext(); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;scaledImage;}我提议这个。她不漂亮吗?)
随时随地看视频慕课网APP
我要回答