裁剪图片之个人总结

1.首先思路是在一个 UIScrollView上放一张 UIImageView,缩放图片之后,通过scrollView的

contentOffset的偏移量除以缩放的比例来获取裁剪图片的相对位置CGRect的起点坐标origin,通过裁剪框的大小(即size)除以缩放的比例来获得需要裁取的图片的CGRect的尺寸size

2.UIImageView的宽高之比必须和原UIImage的宽高之比相同,这样才能保证裁剪出来的图片比例正常不失真!裁剪框的大小可随意设定

float width = [[UIScreenmainScreen] bounds].size.width;

float height = [[UIScreenmainScreen] bounds].size.height;

//根据原始的UIImage的长宽比例计算显示在UIImageView上的图片应有高度

CGSize c = self.img.image.size;

float img_height = c.height*width/c.width;

//裁剪框的大小及设置

self.midsize =CGSizeMake(width, width*0.5);

self.midLabel.frame =CGRectMake(0, (height-60-self.midsize.height)/2, width, self.midsize.height);

self.midLabel.layer.borderColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.6].CGColor;

self.midLabel.layer.borderWidth = 1.0;


3.个人觉得比较关键的一点是UIImageView的起点(0,0)必须和裁剪框的起点相同,这样通过scrollView的contentOffset的偏移量除以缩放的比例才能得出裁减框相对于原图片(UIImage)的偏移量!不服来辩。

//裁剪方法算法上的实现

-(IBAction)clipImage:(id)sender{

    CGPoint cg = self.scroll.contentOffset;

    CGSize c = self.img.image.size;

//计算图片的放大倍数(缩放比例!)

    float zoom = self.img.frame.size.width/c.width;

//求裁剪范围,偏移量和裁剪大小的计算,这里比较关键!通过scrollView的

contentOffset的偏移量除以缩放的比例来获取裁剪图片的相对位置CGRect的起点坐标origin,通过裁剪框的大小(即size)除以缩放的比例来获得需要裁取的图片的CGRect的尺寸size

  

 CGRect rec = CGRectMake(cg.x/zoom, cg.y/zoom,self.midsize.width/zoom,self.midsize.height/zoom);

 CGImageRef imageRef =CGImageCreateWithImageInRect([self.img.image CGImage],rec);

 UIImage *clipImage = [[UIImagealloc]initWithCGImage:imageRef];

 self.img_clip.image = clipImage;

    }


}


//scrollView的代理方法,主要是关于缩放控件设置

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

{   return self.img;

}

//停止缩放的时候即时改变scrollView的内容显示范围contentSize

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale

{

    if(scrollView.zoomScale==1){

        float width = [[UIScreenmainScreen]bounds].size.width;

        float height = [[UIScreenmainScreen]bounds].size.height;

        CGSize c = self.img.image.size;

        

        float img_height = c.height*width/c.width;

        self.scroll.contentSize =CGSizeMake(width, img_height+(height-60-self.midsize.height));


    }else{

        CGSize s =self.scroll.contentSize;

        float width = [[UIScreenmainScreen]bounds].size.width;

        float height = [[UIScreenmainScreen]bounds].size.height;

        CGSize c = self.img.image.size;

        

        float img_height = c.height*width/c.width;

        self.scroll.contentSize =CGSizeMake(s.width,s.width/width*(img_height)+(height-60-self.midsize.height));

    }

    

}




  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值