zoukankan      html  css  js  c++  java
  • UIImage非正方形图片如何剪切为正方形

    有时候项目里做头像上传时候,必须要把用户从相册或是相机里的选择的图片剪切为指定大小的图片,遇到太大,太小或是太长的图片就需coregraphic来对图片进行剪切

    废话不多说,直接上代码


    /**
     *  剪切图片为正方形
     *
     *  @param image   原始图片比如size大小为(400x200)pixels
     *  @param newSize 正方形的size比如400pixels
     *
     *  @return 返回正方形图片(400x400)pixels
     */
    - (UIImage *)squareImageFromImage:(UIImage *)image scaledToSize:(CGFloat)newSize {
        CGAffineTransform scaleTransform;
        CGPoint origin;
        
        if (image.size.width > image.size.height) {
            //image原始高度为200,缩放image的高度为400pixels,所以缩放比率为2
            CGFloat scaleRatio = newSize / image.size.height;
            scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);
            //设置绘制原始图片的画笔坐标为CGPoint(-100, 0)pixels
            origin = CGPointMake(-(image.size.width - image.size.height) / 2.0f, 0);
        } else {
            CGFloat scaleRatio = newSize / image.size.width;
            scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);
            
            origin = CGPointMake(0, -(image.size.height - image.size.width) / 2.0f);
        }
        
        CGSize size = CGSizeMake(newSize, newSize);
        //创建画板为(400x400)pixels
        if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
            UIGraphicsBeginImageContextWithOptions(size, YES, 0);
        } else {
            UIGraphicsBeginImageContext(size);
        }
        
        CGContextRef context = UIGraphicsGetCurrentContext();
        //将image原始图片(400x200)pixels缩放为(800x400)pixels
        CGContextConcatCTM(context, scaleTransform);
        //origin也会从原始(-100, 0)缩放到(-200, 0)
        [image drawAtPoint:origin];
        
        //获取缩放后剪切的image图片
        image = UIGraphicsGetImageFromCurrentImageContext();
        
        UIGraphicsEndImageContext();
        
        return image;
    }







    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    margin塌陷(collapse)
    this的值
    变量、函数声明提升
    Git与Svn的区别—笔记1
    ECMAScript 总结
    正则表达式
    i2c 通信
    player/stage 学习---安装
    各种分区类型对应的partition_Id
    ubuntu 映射网络驱动器到本地
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879325.html
Copyright © 2011-2022 走看看