美文网首页
UIImage 图片拉伸

UIImage 图片拉伸

作者: Rui哥 | 来源:发表于2019-11-28 12:02 被阅读0次

    iOS 图片拉伸技

    1、直接拉伸法

    简单暴力,却是最最常用的方法,直接将图片设置为ImageView的image属性,图片便会随UIImageView对象的大小做自动拉伸。这种拉伸的方法有一个致命的缺陷,它会使图像发生失真与形变。

    2、像素点的拉伸

    • (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;

    这个函数我们可以用来拉伸类似QQ,微信的聊天气泡背景图,它的两个参数分别leftCapWidth和topCapHeight,这两个参数给定一个坐标,比如:

    UIImage * img= [UIImage imageNamed:@"11.png"];
    img = [img stretchableImageWithLeftCapWidth:1 topCapHeight:1];
    

    这段代码的意思是将图片从左起第2列,上起第2行,坐标为(2,2)的像素点进行复制。将图片进行拉伸。这个方法和上面的方法比起来似乎灵活性更多了,但其也有它的一些局限,如果被拉伸的图片中间也有需要拉伸的像素,这个方法就无能为力了,例如,如下的一张图片,我们需要将其拉伸放大:

    便会出现这样的效果:


    这明显和我们的意图是不符的,那么,我们可以使用下面的方法

    3、区域的拉伸

    • (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets;

    这个函数需要设置一个UIEdgeInsets参数,UIEdgeInsets结构体如下:

    typedef struct UIEdgeInsets {
        CGFloat top, left, bottom, right; 
    } UIEdgeInsets;
    

    它分别对用了图片进行拉伸的区域距离顶部、左部、下部、右部的像素。比如,一个1010像素的图片,将UIEdgeInsets参数全部设置为1,则实际拉伸的部分就是中间的88的区域的像素。有一点需要注意,这个方法默认使用的拉伸模式是区域复制,比如还是上面的图案,如下代码拉伸:

        UIImage * img= [UIImage imageNamed:@"11.png"];
        img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(1, 1, 1, 1)];
    
    

    来看一下效果:


    相关文章

      网友评论

          本文标题:UIImage 图片拉伸

          本文链接:https://www.haomeiwen.com/subject/kwavwctx.html