美文网首页
对图片的相关处理

对图片的相关处理

作者: MenaceiOS | 来源:发表于2017-06-10 17:23 被阅读0次

    1、图片等比例压缩

    //等比例压缩
    -(UIImage *) imageCompressForSize:(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、截取当前页面生成图片(屏幕外的也包括在内)

    func captureScorllview(scrollView:UIScrollView) -> UIImage {
            var image = UIImage()
            UIGraphicsBeginImageContext(scrollView.contentSize)
            let savedContentOffset  = scrollView.contentOffset
            let savedFrame = scrollView.frame
            scrollView.contentOffset = .zero
            scrollView.frame = CGRect(x: 0, y: 0, width: scrollView.contentSize.width, height: scrollView.contentSize.height + 100)
            scrollView.layer.render(in: UIGraphicsGetCurrentContext()!)
            image = UIGraphicsGetImageFromCurrentImageContext()!
            let context = CIContext(options: nil)
            var inputImage = CIImage(image: image)
            let options:[String : AnyObject] = [CIDetectorImageOrientation:1 as AnyObject] //图片方向
            let filters = inputImage!.autoAdjustmentFilters(options: options)
            //遍历所有滤镜,依次处理图像
            for filter: CIFilter in filters {
                filter.setValue(inputImage, forKey: kCIInputImageKey)
                inputImage = filter.outputImage
            }
            let cgImage = context.createCGImage(inputImage!, from: inputImage!.extent)
            image = UIImage(cgImage: cgImage!)
            scrollView.contentOffset = savedContentOffset
            scrollView.frame = savedFrame
            UIGraphicsEndImageContext()
            return image
        }
    

    相关文章

      网友评论

          本文标题:对图片的相关处理

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