ios图片处理

来源https://blog.csdn.net/jeikerxiao/article/details/52388744 点击打开链接

iOS 图片处理方法(按比例缩放,指定宽度按比例缩放)

1.按比例缩放

在这里你传入的cgsize就是你要显示图片的区域,或者就是说设置放大图片的区域部分

//按比例缩放,size 是你要把图显示到 多大区域   
+ (UIImage *) imageCompressFitSizeScale:(UIImage *)sourceImage targetSize:(CGSize)size{  
    UIImage *newImage = nil;  
    CGSize imageSize = sourceImage.size;  
    CGFloat width = imageSize.width;  
    CGFloat height = imageSize.height;  
    CGFloat targetWidth = size.width;  
    CGFloat targetHeight = size.height;  
    CGFloat scaleFactor = 0.0;  
    CGFloat scaledWidth = targetWidth;  
    CGFloat scaledHeight = targetHeight;  
    CGPoint thumbnailPoint = CGPointMake(0.0, 0.0);  

    if(CGSizeEqualToSize(imageSize, size) == NO){  

        CGFloat widthFactor = targetWidth / width;  
        CGFloat heightFactor = targetHeight / height;  

        if(widthFactor > heightFactor){  
            scaleFactor = widthFactor;  

        }  
        else{  

            scaleFactor = heightFactor;  
        }  
        scaledWidth = width * scaleFactor;  
        scaledHeight = height * scaleFactor;  

        if(widthFactor > heightFactor){  

            thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;  
        }else if(widthFactor < heightFactor){  

            thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;  
        }  
    }  

    UIGraphicsBeginImageContext(size);  

    CGRect thumbnailRect = CGRectZero;  
    thumbnailRect.origin = thumbnailPoint;  
    thumbnailRect.size.width = scaledWidth;  
    thumbnailRect.size.height = scaledHeight;  

    [sourceImage drawInRect:thumbnailRect];  

    newImage = UIGraphicsGetImageFromCurrentImageContext();  
    if(newImage == nil){  
        NSLog(@"scale image fail");  
    }  

    UIGraphicsEndImageContext();  
    return newImage;  
}  

2.指定宽度按比例缩放

//指定宽度按比例缩放  
-(UIImage *) imageCompressForWidthScale:(UIImage *)sourceImage targetWidth:(CGFloat)defineWidth{  

    UIImage *newImage = nil;  
    CGSize imageSize = sourceImage.size;  
    CGFloat width = imageSize.width;  
    CGFloat height = imageSize.height;  
    CGFloat targetWidth = defineWidth;  
    CGFloat targetHeight = height / (width / targetWidth);  
    CGSize size = CGSizeMake(targetWidth, targetHeight);  
    CGFloat scaleFactor = 0.0;  
    CGFloat scaledWidth = targetWidth;  
    CGFloat scaledHeight = targetHeight;  
    CGPoint thumbnailPoint = CGPointMake(0.0, 0.0);  

    if(CGSizeEqualToSize(imageSize, size) == NO){  

        CGFloat widthFactor = targetWidth / width;  
        CGFloat heightFactor = targetHeight / height;  

        if(widthFactor > heightFactor){  
            scaleFactor = widthFactor;  
        }  
        else{  
            scaleFactor = heightFactor;  
        }  
        scaledWidth = width * scaleFactor;  
        scaledHeight = height * scaleFactor;  

        if(widthFactor > heightFactor){  

            thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;  

        }else if(widthFactor < heightFactor){  

            thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;  
        }  
    }  

    UIGraphicsBeginImageContext(size);  

    CGRect thumbnailRect = CGRectZero;  
    thumbnailRect.origin = thumbnailPoint;  
    thumbnailRect.size.width = scaledWidth;  
    thumbnailRect.size.height = scaledHeight;  

    [sourceImage drawInRect:thumbnailRect];  

    newImage = UIGraphicsGetImageFromCurrentImageContext();  

    if(newImage == nil){  

        NSLog(@"scale image fail");  
    }  
    UIGraphicsEndImageContext();  
    return newImage;  
} 

3. 图片压缩


- (NSData *)compressionImageToDataTargetWH:(CGFloat)targetWH maxFileSize:(NSInteger)maxFileSize  
{  
    if (targetWH <= 0) {  
        targetWH = 1024;  
    }  

    //缩  
    CGSize newSize = CGSizeMake(self.size.width, self.size.height);  
    CGFloat tempHeight = newSize.height / targetWH;  
    CGFloat tempWidth = newSize.width / targetWH;  
    if (tempWidth > 1.0 && tempWidth > tempHeight) {  
        newSize = CGSizeMake(self.size.width / tempWidth, self.size.height / tempWidth);  
    }  
    else if (tempHeight > 1.0 && tempWidth < tempHeight){  
        newSize = CGSizeMake(self.size.width / tempHeight, self.size.height / tempHeight);  
    }  
    UIGraphicsBeginImageContext(newSize);  
    [self drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];  
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();  
    UIGraphicsEndImageContext();  

    //压  
    CGFloat compression = 0.9f;  
    CGFloat maxCompression = 0.1f;  
    NSData *imageData = UIImageJPEGRepresentation(newImage, compression);  
    while (imageData.length / 1000 > maxFileSize && compression > maxCompression) {  
        compression -= 0.1;  
        imageData = UIImageJPEGRepresentation(newImage, compression);  
    }  

    return imageData;  
}  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值