美文网首页
iOS-图片限制

iOS-图片限制

作者: 不可雕的板蓝根 | 来源:发表于2018-07-18 16:58 被阅读0次

    //先限制图片大小,一般用了节省流量iOS和安卓端统一宽度640或者720; 图片大小超过1M,就要循环压缩图片的质量,直到小于1M才去上传。

    + (NSData* )compressionImage:(UIImage* )image WithMaxWidth:(CGFloat )maxWidth limitSize:(NSInteger )limitSize{
        
        if (maxWidth < 0) {
            maxWidth = 1024;
        }
        
        //限制图片大小
        CGSize newSize = CGSizeMake(image.size.width, image.size.height);
        CGFloat scaleH = newSize.height / maxWidth;
        CGFloat scaleW = newSize.width / maxWidth;
        if (scaleW > 1.0 && scaleW > scaleH) {
            newSize = CGSizeMake(ceil(image.size.width / scaleW), ceil(image.size.height / scaleW));
        }else if(scaleH > 1.0 && scaleW < scaleH){
            newSize = CGSizeMake(ceil(image.size.width / scaleH), ceil(image.size.height / scaleH));
        }
        UIGraphicsBeginImageContext(newSize);
        [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
        UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        
        //压缩图片质量
        CGFloat compression = .9f;
        CGFloat minCompression = .1f;
        NSData* imageData = UIImageJPEGRepresentation(newImage, compression);
        while (imageData.length / 1000 >limitSize && compression > minCompression) {
            imageData = nil;
            compression -= .1;
            imageData = UIImageJPEGRepresentation(newImage, compression);
        }
        
        return imageData;
    }
    
    + (UIImage* )getCircleImage:(UIImage* )image withBorderColor:(UIColor* )borderColor withBorderWidth:(CGFloat )borderWidth{
        
        // borderWidth 表示边框的宽度
        CGFloat imageW = image.size.width + 2 * borderWidth;
        CGFloat imageH = imageW;
        CGSize imageSize = CGSizeMake(imageW, imageH);
        UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0);
        CGContextRef context = UIGraphicsGetCurrentContext();
        // borderColor表示边框的颜色
        [borderColor set];
        CGFloat bigRadius = imageW * 0.5;
        CGFloat centerX = bigRadius;
        CGFloat centerY = bigRadius;
        CGContextAddArc(context, centerX, centerY, bigRadius, 0, M_PI * 2, 0);
        CGContextFillPath(context);
        CGFloat smallRadius = bigRadius - borderWidth;
        CGContextAddArc(context, centerX, centerY, smallRadius, 0, M_PI * 2, 0);
        CGContextClip(context);
        [image drawInRect:CGRectMake(borderWidth, borderWidth, image.size.width, image.size.height)];
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return newImage;
    }
    

    相关文章

      网友评论

          本文标题:iOS-图片限制

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