图像变得拉伸,同时制作椭圆形的uiimage

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像变得拉伸,同时制作椭圆形的uiimage相关的知识,希望对你有一定的参考价值。

我正在使用以下代码来制作椭圆形图像。

 UIImage * fooImage = image;

CGRect imageRect = CGRectMake(0, 0, 291, 130);

UIGraphicsBeginImageContextWithOptions(imageRect.size,NO,0.0);
// create a bezier path defining rounded corners
UIBezierPath * path = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(0.0, 0.0, CGRectGetWidth(img_blank.frame), CGRectGetHeight(img_blank.frame))];

// use this path for clipping in the implicit context
[path addClip];
// draw the image into the implicit context
[fooImage drawInRect:imageRect];
// save the clipped image from the implicit context into an image
UIImage *maskedImage = UIGraphicsGetImageFromCurrentImageContext();
       img_blank.image=maskedImage;

这里image_blank是我正在使用的UIImage,如果图像宽度更大,高度更小,那么它就不会拉伸。如果我改变了值,我将不会得到适合我的UIImageview(img_blank)的椭圆形状。

答案

此问题是您的rect大小和图像大小不匹配。

当你:[fooImage drawInRect:imageRect];

图像将被绘制成倾斜到该矩形,您定义为CGRectMake(0, 0, 291, 130);

要使其工作,您需要创建第二个矩形,扩展椭圆的矩形以匹配图像的宽高比。然后,您可以使用此第二个矩形绘制图像,以便图像将纵横填充椭圆。

这是我过去用于类似问题的一些伪代码:

// get the size of the image that we want to scale
CGSize imageSize = imageToDraw.size;
// get the size of the canvas we're trying to fill
CGSize canvasSize = imageRect.size;
// we need to see how the ratio of image width & height compare to the canvas
CGFloat horizontalRatio = canvasSize.width / imageSize.width;
CGFloat verticalRatio = canvasSize.height / imageSize.height;
// pick the ratio that requires the most scaling
CGFloat ratio = MAX(horizontalRatio, verticalRatio); //AspectFill
// calculate the size that we should draw the image so that it could fill
// the entire canvas with an aspect-fill rule
CGSize aspectFillSize = CGSizeMake(imageSize.width * ratio, imageSize.height * ratio);

// now draw the image, centering it and filling the canvas
[imageToDraw drawInRect:CGRectMake((canvasSize.width-aspectFillSize.width)/2,
                                           (canvasSize.height-aspectFillSize.height)/2,
                                            aspectFillSize.width,
                                            aspectFillSize.height)];

以上是关于图像变得拉伸,同时制作椭圆形的uiimage的主要内容,如果未能解决你的问题,请参考以下文章

制作 UIImage 的方形裁剪导致图像拉伸

如何制作一个包含在整个屏幕上拉伸的背景图像的颤动应用程序,带有返回句子的图像的圆形按钮?

代码创建的圆形纯色图像模糊

iOS 自定义键盘可拉伸图像停止拉伸

如何缩小 UIImage 并使其同时变得清晰/锐利而不是模糊?

UIImage 中的自定尺寸 UITableViewCell 拉伸