ios如何绘制一个大的图像在小尺寸与新上下文?

发布时间: 2017/3/28 23:21:49
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

![输入图像描述在这里][1]通过使用下面的代码,我能画一个大的图像在小窗体,但新的一个图像有其上海华盈上下文或其他字新的图像显示在中心的新 image 但有大的白色背景,来掩盖大 imageSize。

所以,实际图像大小是一样大的图像,但我想删除多余的空白区域。

  UIGraphicsBeginImageContextWithOptions(largeImage.size, NO, 0);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [[UIColor clearColor] setFill];
    CGContextSetLineWidth(context, 4.0);
    CGContextSetStrokeColorWithColor(context,
                                     [UIColor clearColor].CGColor);
    CGRect rectangle = CGRectMake((largeImage.size.width-80)/2, (largeImage.size.height-60)/2, 60, 80);
    CGContextAddEllipseInRect(context, rectangle);
    CGContextStrokePath(context);
    [largeImage drawInRect:rectangle];

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

最后,我得到 smallSizeimage 与大量的白色背景。我想要改变他们白色的背景不损失图像质量。 请指导我......

解决方法 1:

你过度复杂过程的伴侣。

我会寄到你的问题,解释如下
因为我不是英语为母语,如果一些我的解释并不是很清楚,告诉我,和我会尝试重组他们。
如果你只是感兴趣的工作代码,没有任何的我的解释,只是滚动到底部。

首先,你的主要问题有以下两个︰
UIGraphicsBeginImageContextWithOptions(largeImage.size, NO, 0);[largeImage drawInRect:rectangle];

UIGraphicsBeginImageContextWithOptions 你想设置您感兴趣的意义、 新的图像大小和不大的一个,因为你在你的例子做的新图形上下文。

第二, UIImage 实例方法 [yourImage drawInRect:yourRect 是在你的图形上下文的坐标系统而不是坐标系统的视图。
意思,你想把它当作一个矩形开始在 (0, 0) 和是你的图像的大小。

向你解释你过的错误,我后将 2 个版本的代码。
一是过程的要从你原来的人,你会看到在第二次的小图像多少是过程的一个简单。
第二个是你上面的代码,修改后的版本,因为我不知道你正在使用它,可能需要做一些其他的东西从你的原始代码的使用。

调整图像的大小︰

CGSize newSize = CGSizeMake(60,80); // Our new image size  
CGRect newRect = CGRectMake(0, 0, 60, 80); // Our 'work' rect in out image context
// Begin a new image context with the new size we want
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);  
// Draw our image to our new rect  
[largeImage drawInRect:newRect];  
// Create a new UIImage from our new context  
UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();  
// End our image context  
UIGraphicsEndImageContext();  

就是这样 !

如果您还需要使用一些从原始代码,在这里是东西的一个修改后的版本︰

CGSize newSize = CGSizeMake(60, 80);  
CGRect newRect = CGRectMake(0, 0, 60, 80);  
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);  
CGContextRef context = UIGraphicsGetCurrentContext();  
[[UIColor clearColor] setFill];  
CGContextSetLineWidth(context, 4.0);
CGContextSetStrokeColorWithColor(context,
                                 [UIColor clearColor].CGColor);
CGContextAddEllipseInRect(context, newRect);
CGContextClip(context); // EDIT- this is what we were missing
CGContextStrokePath(context);
[largeImage drawInRect:newRect];
UIImage *smallSizeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();  

运气好伴侣 !

编辑-签出上面的代码进行编辑。
基本上,你和我错过了什么都在您的代码是,甚至强硬,您创建一个圆形的上下文通过使用 CGContextAddEllipseInRect() ,我们不要有个叫 CGContextClip() 到实际上 '' 将上下文剪裁在我们椭圆的形状。
现在你的形象应该 ' 四舍五入 '。

赞助商