1.根据给定得图片,从其指定区域截取一张新得图片

  1. -(UIImage *)getImageFromImage{
  2.     //大图bigImage
  3.     //定义myImageRect,截图的区域
  4.     CGRect myImageRect = CGRectMake(10.0, 10.0, 57.0, 57.0);
  5.     UIImage* bigImage= [UIImage imageNamed:@"k00030.jpg"];
  6.     CGImageRef imageRef = bigImage.CGImage;
  7.     CGImageRef subImageRef = CGImageCreateWithImageInRect(imageRef, myImageRect);
  8.     CGSize size;
  9.     size.width = 57.0;
  10.     size.height = 57.0;
  11.     UIGraphicsBeginImageContext(size);
  12.     CGContextRef context = UIGraphicsGetCurrentContext();
  13.     CGContextDrawImage(context, myImageRect, subImageRef);
  14.     UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];
  15.     UIGraphicsEndImageContext();
  16.     return smallImage;
  17. }
复制代码

2.针对UIImage得一些常用缩放得方法:

  1. -(UIImage*)resizedImage1:(UIImage*)inImage  inRect:(CGRect)thumbRect {
  2.     // Creates a bitmap-based graphics context and makes it the current context.
  3.     UIGraphicsBeginImageContext(thumbRect.size);
  4.     [inImage drawInRect:thumbRect];
  5.     return UIGraphicsGetImageFromCurrentImageContext();
  6. }
  7. -(UIImage*)resizedImage2:(UIImage*)inImage  inRect:(CGRect)thumbRect {
  8.     CGImageRef          imageRef = [inImage CGImage];
  9.     CGImageAlphaInfo    alphaInfo = CGImageGetAlphaInfo(imageRef);
  10.     /* There's a wierdness with kCGImageAlphaNone and CGBitmapContextCreate
  11.     see Supported Pixel Formats in the Quartz 2D Programming Guide
  12.     Creating a Bitmap Graphics Context section
  13.     only RGB 8 bit images with alpha of kCGImageAlphaNoneSkipFirst,         kCGImageAlphaNoneSkipLast, kCGImageAlphaPremultipliedFirst,and kCGImageAlphaPremultipliedLast, with a few other oddball image kinds are supported
  14. The images on input here are likely to be png or jpeg files*/
  15.     if (alphaInfo == kCGImageAlphaNone)
  16.         alphaInfo = kCGImageAlphaNoneSkipLast;
  17.         // Build a bitmap context that's the size of the thumbRect
  18.        CGFloat bytesPerRow;
  19.     if( thumbRect.size.width > thumbRect.size.height ) {
  20.        bytesPerRow = 4 * thumbRect.size.width;
  21.     } else {
  22.        bytesPerRow = 4 * thumbRect.size.height;
  23.     }
  24.     CGContextRef bitmap = CGBitmapContextCreate(NULL,
  25.                                                         thumbRect.size.width,       // width
  26.                                                         thumbRect.size.height,      // height
  27.                                                         8, //CGImageGetBitsPerComponent(imageRef),  // really needs to always be 8
  28.                                                         bytesPerRow, //4 * thumbRect.size.width,    // rowbytes
  29.                                                         CGImageGetColorSpace(imageRef),
  30.                                                         alphaInfo
  31. );
  32.     // Draw into the context, this scales the image
  33.     CGContextDrawImage(bitmap, thumbRect, imageRef);
  34.     // Get an image from the context and a UIImage
  35.     CGImageRef  ref = CGBitmapContextCreateImage(bitmap);
  36.     UIImage*    result = [UIImage imageWithCGImage:ref];
  37.     CGContextRelease(bitmap);   // ok if NULL
  38.     CGImageRelease(ref);
  39.     return result;
  40. }
  41. - (UIImage *)scaleImage:(UIImage *) image maxWidth:(float) maxWidth maxHeight:(float) maxHeight
  42. {
  43.     CGImageRef imgRef = image.CGImage;
  44.     CGFloat width = CGImageGetWidth(imgRef);
  45.     CGFloat height = CGImageGetHeight(imgRef);
  46.     if (width <= maxWidth && height <= maxHeight)
  47.     {
  48.         return image;
  49.     }
  50.     CGAffineTransform transform = CGAffineTransformIdentity;
  51.     CGRect bounds = CGRectMake(0, 0, width, height);
  52.     if (width > maxWidth || height > maxHeight)
  53.     {
  54.         CGFloat ratio = width/height;
  55.         if (ratio > 1)
  56.         {
  57.             bounds.size.width = maxWidth;
  58.             bounds.size.height = bounds.size.width / ratio;
  59.         }
  60.         else
  61.         {
  62.             bounds.size.height = maxHeight;
  63.              bounds.size.width = bounds.size.height * ratio;
  64.         }
  65.     }
  66.     CGFloat scaleRatio = bounds.size.width / width;
  67.     UIGraphicsBeginImageContext(bounds.size);
  68.     CGContextRef context = UIGraphicsGetCurrentContext();
  69.     CGContextScaleCTM(context, scaleRatio, -scaleRatio);
  70.     CGContextTranslateCTM(context, 0, -height);
  71.     CGContextConcatCTM(context, transform);
  72.     CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);
  73.     UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
  74.     UIGraphicsEndImageContext();
  75.     return imageCopy;
  76. }
复制代码

3.其他缩放uiimage的size,有需要的可以看看

  1. -(UIImage*) scaleAndRotateImage:(UIImage*)photoimage:(CGFloat)bounds_width:(CGFloat)bounds_height
  2. {
  3.     //int kMaxResolution = 300;
  4.     CGImageRef imgRef =photoimage.CGImage;
  5.     CGFloat width = CGImageGetWidth(imgRef);
  6.     CGFloat height = CGImageGetHeight(imgRef);
  7.     CGAffineTransform transform = CGAffineTransformIdentity;
  8.     CGRect bounds = CGRectMake(0, 0, width, height);
  9.     /*if (width > kMaxResolution || height > kMaxResolution)
  10.     {
  11.         CGFloat ratio = width/height;
  12.         if (ratio > 1)
  13.         {
  14.             bounds.size.width = kMaxResolution;
  15.             bounds.size.height = bounds.size.width / ratio;
  16.         }
  17.         else
  18.         {
  19.             bounds.size.height = kMaxResolution;
  20.             bounds.size.width = bounds.size.height * ratio;
  21.         }
  22.     }*/
  23.     bounds.size.width = bounds_width;
  24.     bounds.size.height = bounds_height;
  25.     CGFloat scaleRatio = bounds.size.width / width;
  26.     CGFloat scaleRatioheight = bounds.size.height / height;
  27.     CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));
  28.     CGFloat boundHeight;
  29.     UIImageOrientation orient =photoimage.imageOrientation;
  30.     switch(orient)
  31.     {
  32.         case UIImageOrientationUp: //EXIF = 1
  33.             transform = CGAffineTransformIdentity;
  34.             break;
  35.         case UIImageOrientationUpMirrored: //EXIF = 2
  36.             transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);
  37.             transform = CGAffineTransformScale(transform, -1.0, 1.0);
  38.             break;
  39.         case UIImageOrientationDown: //EXIF = 3
  40.             transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);
  41.             transform = CGAffineTransformRotate(transform, M_PI);
  42.             break;
  43.         case UIImageOrientationDownMirrored: //EXIF = 4
  44.             transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);
  45.             transform = CGAffineTransformScale(transform, 1.0, -1.0);
  46.             break;
  47.         case UIImageOrientationLeftMirrored: //EXIF = 5
  48.             boundHeight = bounds.size.height;
  49.             bounds.size.height = bounds.size.width;
  50.             bounds.size.width = boundHeight;
  51.             transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);
  52.             transform = CGAffineTransformScale(transform, -1.0, 1.0);
  53.             transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
  54.             break;
  55.         case UIImageOrientationLeft: //EXIF = 6
  56.             boundHeight = bounds.size.height;
  57.             bounds.size.height = bounds.size.width;
  58.             bounds.size.width = boundHeight;
  59.             transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);
  60.             transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
  61.             break;
  62.         case UIImageOrientationRightMirrored: //EXIF = 7
  63.             boundHeight = bounds.size.height;
  64.             bounds.size.height = bounds.size.width;
  65.             bounds.size.width = boundHeight;
  66.             transform = CGAffineTransformMakeScale(-1.0, 1.0);
  67.             transform = CGAffineTransformRotate(transform, M_PI / 2.0);
  68.             break;
  69.         case UIImageOrientationRight: //EXIF = 8
  70.             boundHeight = bounds.size.height;
  71.             bounds.size.height = bounds.size.width;
  72.             bounds.size.width = boundHeight;
  73.             transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);
  74.             transform = CGAffineTransformRotate(transform, M_PI / 2.0);
  75.             break;
  76.         default:
  77.             [NSException raise:NSInternalInconsistencyException format:@"Invalid?image?orientation"];
  78.             break;
  79.     }
  80.     UIGraphicsBeginImageContext(bounds.size);
  81.     CGContextRef context = UIGraphicsGetCurrentContext();
  82.     if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft)
  83.     {
  84.         CGContextScaleCTM(context, -scaleRatio, scaleRatioheight);
  85.         CGContextTranslateCTM(context, -height, 0);
  86.     }
  87.     else
  88.     {
  89.         CGContextScaleCTM(context, scaleRatio, -scaleRatioheight);
  90.         CGContextTranslateCTM(context, 0, -height);
  91.     }
  92.     CGContextConcatCTM(context, transform);
  93.     CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);
  94.     UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
  95.     UIGraphicsEndImageContext();
  96.     return imageCopy;
  97. }

來源:http://blog.sina.com.cn/s/blog_6568e7880100lvmu.html

arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()