广

IOS开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    ios中图像进行压缩方法汇总

    2018-04-03 22:30:33 次阅读 稿源:互联网
    广告

    方法一:

    代码如下:

    - (UIImage*)scaleFromImage:(UIImage*)image scaledToSize:(CGSize)newSize
    {
     CGSize imageSize = image.size;
     CGFloat width = imageSize.width;
     CGFloat height = imageSize.height;
         
     if (width <= newSize.width && height <= newSize.height){
      return image;
     }
         
     if (width == 0 || height == 0){
      return image;
     }
         
     CGFloat widthFactor = newSize.width / width;
     CGFloat heightFactor = newSize.height / height;
     CGFloat scaleFactor = (widthFactor<heightFactor?widthFactor:heightFactor);
         
     CGFloat scaledWidth = width * scaleFactor;
     CGFloat scaledHeight = height * scaleFactor;
     CGSize targetSize = CGSizeMake(scaledWidth,scaledHeight);
         
        UIGraphicsBeginImageContext(targetSize);
        [image drawInRect:CGRectMake(0,0,scaledWidth,scaledHeight)];
        UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return newImage;
    }

    方法二:

    .h具体code
    代码如下:

    #import <Foundation/Foundation.h> 
    @interface UIImage (UIImageExt) 
    - (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size; 
    - (UIImage *)imageByScalingAndCroppingForSize:(CGSize)targetSize; 
    @end 

    .m具体code

    代码如下:

    #import "UIImageExt.h" 
    @implementation UIImage (UIImageExt) 
    - (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size{ 
        // 创建一个bitmap的context 
        // 并把它设置成为当前正在使用的context 
        UIGraphicsBeginImageContext(size); 
        // 绘制改变大小的图片 
        [img drawInRect:CGRectMake(0, 0, size.width, size.height)]; 
        // 从当前context中创建一个改变大小后的图片 
        UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); 
        // 使当前的context出堆栈 
        UIGraphicsEndImageContext(); 
        // 返回新的改变大小后的图片 
        return scaledImage; 

    - (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize 

        UIImage *sourceImage = self; 
        UIImage *newImage = nil; 
        CGSize imageSize = sourceImage.size; 
        CGFloat width = imageSize.width; 
        CGFloat height = imageSize.height; 
        CGFloat targetWidth = targetSize.width; 
        CGFloat targetHeight = targetSize.height; 
        CGFloat scaleFactor = 0.0; 
        CGFloat scaledWidth = targetWidth; 
        CGFloat scaledHeight = targetHeight; 
        CGPoint thumbnailPoint = CGPointMake(0.0,0.0); 
        if (CGSizeEqualToSize(imageSize, targetSize) == NO) 
        { 
            CGFloat widthFactor = targetWidth / width; 
            CGFloat heightFactor = targetHeight / height; 
            if (widthFactor > heightFactor) 
                scaleFactor = widthFactor; // scale to fit height 
            else 
                scaleFactor = heightFactor; // scale to fit width 
            scaledWidth  = width * scaleFactor; 
            scaledHeight = height * scaleFactor; 
            // center the image 
            if (widthFactor > heightFactor) 
            { 
                thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
            } 
            else 
                if (widthFactor < heightFactor) 
                { 
                    thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5; 
                } 
        } 
        UIGraphicsBeginImageContext(targetSize); // this will crop 
        CGRect thumbnailRect = CGRectZero; 
        thumbnailRect.origin = thumbnailPoint; 
        thumbnailRect.size.width  = scaledWidth; 
        thumbnailRect.size.height = scaledHeight; 
        [sourceImage drawInRect:thumbnailRect]; 
        newImage = UIGraphicsGetImageFromCurrentImageContext(); 
        if(newImage == nil) 
            NSLog(@"could not scale image"); 
        //pop the context to get back to the default 
        UIGraphicsEndImageContext(); 
        return newImage; 

    @end 

    方法三:(本人项目中使用的方法)

    代码如下:

    -(UIImage *) imageCompressForWidth:(UIImage *)sourceImage targetWidth:(CGFloat)defineWidth
    {
        CGSize imageSize = sourceImage.size;
        CGFloat width = imageSize.width;
        CGFloat height = imageSize.height;
        CGFloat targetWidth = defineWidth;
        CGFloat targetHeight = (targetWidth / width) * height;
        UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight));
        [sourceImage drawInRect:CGRectMake(0,0,targetWidth,  targetHeight)];
        UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return newImage;
    }

    以上所述就是本文的全部内容了,希望大家能够喜欢。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告