• [转]常用iOS图片处理方法



     ========== (one) UIImage 图像 等比例缩放==================================
    PicAfterZoomWidth:缩放后图片宽  PicAfterZoomHeight:缩放后图片高 (预定义)

    + (UIImage *)getPicZoomImage:(UIImage *)image {

     

        UIImage *img = image;

        

        int h = img.size.height;

        int w = img.size.width;

        if(h <= PicAfterZoomWidth && w <= PicAfterZoomHeight)

        {

            image = img;

        }

        else 

        {

            float b = (float)PicAfterZoomWidth/w < (float)PicAfterZoomHeight/h ? (float)PicAfterZoomWidth/w : (float)PicAfterZoomHeight/h;

            CGSize itemSize = CGSizeMake(b*w, b*h);

            UIGraphicsBeginImageContext(itemSize);

            CGRect imageRect = CGRectMake(00, b*w, b*h);

            [img drawInRect:imageRect];

            img = UIGraphicsGetImageFromCurrentImageContext();

            UIGraphicsEndImageContext();

        }

        return img;

    }


     =============== ( two )把图片 圆角 化==================================

     

    static void addRoundedRectToPath(CGContextRef context, CGRect rect, float ovalWidth,

                                     float ovalHeight)

    {

        float fw, fh;

        if (ovalWidth == 0 || ovalHeight == 0) {

            CGContextAddRect(context, rect);

            return;

        }

        CGContextSaveGState(context);

        CGContextTranslateCTM(context, CGRectGetMinX(rect), CGRectGetMinY(rect));

        CGContextScaleCTM(context, ovalWidth, ovalHeight);

        fw = CGRectGetWidth(rect) / ovalWidth;

        fh = CGRectGetHeight(rect) / ovalHeight;

        CGContextMoveToPoint(context, fw, fh/2);  // Start at lower right corner

        CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);  // Top right corner

        CGContextAddArcToPoint(context, 0, fh, 0, fh/21); // Top left corner

        CGContextAddArcToPoint(context, 00, fw/201); // Lower left corner

        CGContextAddArcToPoint(context, fw, 0, fw, fh/21); // Back to lower right

        CGContextClosePath(context);

        CGContextRestoreGState(context);

    }

    + (id) createRoundedRectImage:(UIImage*)image size:(CGSize)size

    {

        // the size of CGContextRef

        int w = size.width;

        int h = size.height;

        

        UIImage *img = image;

        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

        CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace,kCGImageAlphaPremultipliedFirst);

        CGRect rect = CGRectMake(00, w, h);

        CGContextBeginPath(context);

        addRoundedRectToPath(context, rect, 1010);

        CGContextClosePath(context);

        CGContextClip(context);

        CGContextDrawImage(context, CGRectMake(00, w, h), img.CGImage);

        CGImageRef imageMasked = CGBitmapContextCreateImage(context);

        CGContextRelease(context);

        CGColorSpaceRelease(colorSpace);

        return [UIImage imageWithCGImage:imageMasked];

    }

    =============== (Three)给图片 添加阴影==================================

    請先添加库 import QuartzCore.framework

    然后要导入头文件 #import <QuartzCore/QuartzCore.h>

    [[myView layer] setShadowOffset:CGSizeMake(5, 5)]; //设置阴影起点位置

    [[myView layer] setShadowRadius:6];                       //设置阴影扩散程度

    [[myView layer] setShadowOpacity:1];                      //设置阴影透明度

    [[myView layer] setShadowColor:[UIColor blueColor].CGColor]; //设置阴影颜色

     ========== (Four) UIImage 图像 旋转==================================

    - (UIImage *)imageRotatedByRadians:(CGFloat)radians

    {

        return [self imageRotatedByDegrees:radians * 180/M_PI];

    }

    - (UIImage *)imageRotatedByDegrees:(CGFloat)degrees 

    {   

        // calculate the size of the rotated view's containing box for our drawing space

        UIView *rotatedViewBox = [[UIView allocinitWithFrame:CGRectMake(0,0,self.size.width,self.size.height)];

        CGAffineTransform t = CGAffineTransformMakeRotation(degrees * M_PI / 180);

        rotatedViewBox.transform = t;

        CGSize rotatedSize = rotatedViewBox.frame.size;

        [rotatedViewBox release];

        // Create the bitmap context

        UIGraphicsBeginImageContext(rotatedSize);

        CGContextRef bitmap = UIGraphicsGetCurrentContext();

        // Move the origin to the middle of the image so we will rotate and scale around the center.

        CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);

        

        //   // Rotate the image context

        CGContextRotateCTM(bitmap, degrees * M_PI / 180);

        // Now, draw the rotated/scaled image into the context

        CGContextScaleCTM(bitmap, 1.0, -1.0);

        CGContextDrawImage(bitmap, CGRectMake(-self.size.width / 2, -self.size.height / 2,self.size.widthself.size.height), [self CGImage]);

        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();

        return newImage;

    }

    图像旋转更多请看:http://www.catamount.com/blog/1015/uiimage-extensions-for-cutting-scaling-and-rotating-uiimages/

  • 相关阅读:
    C++中字符数组和字符指针问题
    C++中的常量指针和指针常量
    C++中指针形参问题
    Xcode视图调试Debug View Hierarchy
    第3章 程序的机器级表示(深入理解计算机系统)
    第2章 信息的表示和处理(深入理解计算机系统)
    第1章 计算机系统漫游(深入理解计算机系统)
    用gcc编译.cpp文件可能出现"undefined reference to `__gxx_personality_v0'"问题的解决
    第12章 并发编程(深入理解计算机系统)
    第11章 网络编程(深入理解计算机系统)
  • 原文地址:https://www.cnblogs.com/jz319/p/4084158.html
Copyright © 2020-2023  润新知