`

iPhone图片UIImage对象操作的一些方法 [转]

 
阅读更多

http://mobile.51cto.com/iphone-284346.htm

iPhone开发应用UIImage图片对象操作是本文要介绍的内容,主要来学习UIImage图片对象操作,内容不多,主要是以代码实现图片对象的操作。

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;   

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,         
  14. kCGImageAlphaNoneSkipLast, kCGImageAlphaPremultipliedFirst,and kCGImageAlphaPremultipliedLast, 
  15. with a few other oddball image kinds are supported   
  16. The images on input here are likely to be png or jpeg files*/   
  17.     if (alphaInfo == kCGImageAlphaNone)   
  18.         alphaInfo = kCGImageAlphaNoneSkipLast;   
  19.         // Build a bitmap context that's the size of the thumbRect   
  20.        CGFloat bytesPerRow;   
  21.     if( thumbRect.size.width > thumbRect.size.height ) {   
  22.        bytesPerRow = 4 * thumbRect.size.width;   
  23.     } else {   
  24.        bytesPerRow = 4 * thumbRect.size.height;   
  25.     }   
  26.     CGContextRef bitmap = CGBitmapContextCreate(NULL,   
  27.                                                         thumbRect.size.width,       // width   
  28.                                                         thumbRect.size.height,      // height   
  29.                                                         8, //CGImageGetBitsPerComponent(imageRef),  // really needs to always be 8   
  30.                                                         bytesPerRow, //4 * thumbRect.size.width,    // rowbytes   
  31.                                                         CGImageGetColorSpace(imageRef),   
  32.                                                         alphaInfo   
  33. );   
  34.     // Draw into the context, this scales the image   
  35.     CGContextDrawImage(bitmap, thumbRect, imageRef);   
  36.     // Get an image from the context and a UIImage   
  37.     CGImageRef  ref = CGBitmapContextCreateImage(bitmap);   
  38.     UIImage*    result = [UIImage imageWithCGImage:ref];   
  39.     CGContextRelease(bitmap);   // ok if NULL   
  40.     CGImageRelease(ref);   
  41.     return result;   
  42. }   
  43. - (UIImage *)scaleImage:(UIImage *) image maxWidth:(float) maxWidth maxHeight:(float) maxHeight   
  44. {   
  45.     CGImageRef imgRef = image.CGImage;   
  46.     CGFloat width = CGImageGetWidth(imgRef);   
  47.     CGFloat height = CGImageGetHeight(imgRef);   
  48.     if (width <= maxWidth && height <= maxHeight)   
  49.     {   
  50.         return image;   
  51.     }   
  52.     CGAffineTransform transform = CGAffineTransformIdentity;   
  53.     CGRect bounds = CGRectMake(0, 0, width, height);   
  54.     if (width > maxWidth || height > maxHeight)   
  55.     {   
  56.         CGFloat ratio = width/height;   
  57.         if (ratio > 1)   
  58.         {   
  59.             bounds.size.width = maxWidth;   
  60.             boundsbounds.size.height = bounds.size.width / ratio;   
  61.         }   
  62.         else   
  63.         {   
  64.             bounds.size.height = maxHeight;   
  65.              boundsbounds.size.width = bounds.size.height * ratio;   
  66.         }   
  67.     }   
  68.     CGFloat scaleRatio = bounds.size.width / width;   
  69.     UIGraphicsBeginImageContext(bounds.size);   
  70.     CGContextRef context = UIGraphicsGetCurrentContext();   
  71.     CGContextScaleCTM(context, scaleRatio, -scaleRatio);   
  72.     CGContextTranslateCTM(context, 0, -height);   
  73.     CGContextConcatCTM(context, transform);   
  74.     CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);   
  75.     UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();   
  76.     UIGraphicsEndImageContext();   
  77.     return imageCopy;   

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.             boundsbounds.size.height = bounds.size.width / ratio;   
  16.         }   
  17.         else   
  18.         {   
  19.             bounds.size.height = kMaxResolution;   
  20.             boundsbounds.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.             boundsbounds.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.             boundsbounds.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.             boundsbounds.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.             boundsbounds.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;   
分享到:
评论

相关推荐

    几个iphone uiimage resize 的类

    在iPhone应用中,由于屏幕尺寸和性能考虑,经常需要对UIImage对象进行尺寸调整,以确保图片在不同设备上正确显示和高效加载。下面将详细介绍标题和描述中提及的"UIImage resize"知识点,以及如何通过自定义类别来...

    iphone ImageView转灰色图片demo

    本示例"iphone ImageView转灰色图片demo"就是展示了如何实现这一功能。 首先,我们需要了解UIImageView和UIImage。UIImageView是iOS SDK中用于显示图像的UI组件,它可以显示一张图片或者作为背景。UIImage对象则...

    ios应用源码之转换iphonepng图片为标准格式src 20181210

    首先,通过NSData的`+dataWithContentsOfFile:`方法读取PNG文件,然后用UIImage的`+imageWithData:`方法创建UIImage对象。接着,可以使用`CGImageSourceCreateWithData`和`CGImageDestinationCreateWithData`等Core ...

    转换iPhonePNG图片为标准格式src绘图源码_ios源码

    总之,这个项目提供了一种方法来将iPhone的PNG图片转换为适合iOS应用的标准格式,同时可能还包含了一些代码优化和自定义绘图的技术。通过研究源码,开发者可以学习到iOS图形处理和图片操作的技巧,提高自己的iOS开发...

    ios iphone iphone桌面截图代码

    5. **UIImage对象**:UIImage是iOS中表示图像的数据结构,它包含了图片的信息,如像素数据、格式等。获取到UIImage后,可以进行保存、分享或显示在界面上。 6. **保存截图**:如果需要将截图保存到设备上,可以使用...

    图片旋转demo

    在`UIImage-Extensions.h`中,通常会定义一些方法声明,例如: ```objc @interface UIImage (Rotation) - (UIImage *)imageRotatedByDegrees:(CGFloat)degrees; @end ``` 这里声明了一个名为`...

    iOS iPhone 图片拉伸源代码

    在iOS中,图片通常以UIImage对象的形式存在,而拉伸图片主要是调整其内容以适应不同的大小,同时保持关键区域不失真。这通常涉及到两个重要的概念:内容模式(Content Mode)和拉伸区域(Stretchable Region)。 1....

    iPhone 图像处理小结

    当你需要改变图片的尺寸时,可以使用`UIImage`类中的方法来实现。如代码所示,`scaleToSize:`方法是一个自定义的方法,它创建一个新的`UIGraphicsImageRendererContext`,然后在指定的矩形区域内绘制原始图片,最后...

    iphone 图像处理小结.doc

    若希望在应用启动时自动显示之前保存的图片,可以使用`NSData`的`writeToFile:atomically:`方法将图片数据写入文件,然后在应用启动时使用`initWithContentsOfFile:`方法从文件中读取并创建`UIImage`对象。...

    iphone开发中的一些小技巧

    首先通过`UIImage`的`imageNamed:`方法加载图片,然后利用`CGImage`的相关方法提取图片的指定区域,最后将截取后的`CGImageRef`转换回`UIImage`对象。 ### 3. 检测是否为Retina屏幕 Retina屏幕是指具有高像素密度...

    IOS应用源码——一些iPhone开源项目代码ImagePickerDemo.zip

    UIImage对象可以与CGImage相互转换,方便进行图像处理。 9. **Notification与KVO(Key-Value Observing)**:为了实现界面间的通信,项目可能使用NSNotification或KVO来监听特定事件或对象属性的变化,从而实时更新...

    (0140)-iOS/iPhone/iPAD/iPod源代码-其他(Others)-QR Code Encoder

    本资源“(0140)-iOS/iPhone/iPad/iPod源代码-其他(Others)-QR Code Encoder”提供了一个实用的解决方案,它是一个能够将NSString对象转换为UIImage对象的QR码生成器。这个工具使用了开源库libqrencode来实现...

    simple-iphone-image-processing

    在iPhone上,可以使用UIImage对象来存储和处理图像,但进行复杂的图像处理时,通常需要将其转换为CIImage对象,以便与Core Image框架更好地交互。处理完成后,再将CIImage转换回UIImage显示在屏幕上。 6. 性能优化 ...

    base64 转码

    在iOS和iPhone开发中,Base64转码尤其重要,因为它可以将图片转换为字符串格式,方便在网络请求中作为参数传递,或者存储在数据库中。 一、Base64编码原理 Base64编码的原理是将每3个字节(24位)的数据转换为4个...

    此处是问题图片,文章中使用

    - 使用`UIImage`类:在iOS开发中,`UIImage`是处理图片的主要对象,可以加载、显示和处理图片。 - 屏幕适配:通过`@2x`、`@3x`等后缀标识不同分辨率的图片,系统会自动选择合适的资源。 - 动态加载:对于大图或...

    缓存图片库 demo

    首先,你需要导入库,然后在需要显示图片的UIImageView对象上调用`sd_setImageWithURL:`方法,传入图片的URL。库内部会自动处理下载、解码和缓存的过程。例如: ```swift import SDWebImage imageView.sd_setImage...

    ios 网页中图片点击放大效果demo

    可以使用`NSURLSession`或者`NSData`来下载图片数据,并用`UIImage`的初始化方法创建图片对象。 5. **图片放大效果**: 为了实现放大效果,我们可以使用`UIImageView`或自定义视图来显示图片。通常会配合手势识别器...

    ios-简单实现点击图片预览。.zip

    首先,我们要明白在iOS中处理图片预览主要涉及的组件有UIImageView和UIPopoverPresentationController(对于iPad)或UINavigationController(对于iPhone)。当用户点击UIImageView时,我们通常会弹出一个新的...

    iOS蓝牙打印

    在PrinterDemoDev开源项目中,开发者很可能会找到如何将UIImage对象转换为打印机可以理解的数据流的方法。 接下来,我们来看看PrinterDemoDev项目。该项目通常会包含以下关键部分: 1. CBCentralManager的实现:...

    IOS应用源码——图片截图.zip

    传入UIImage对象,系统会处理保存过程,并提供一个完成回调,告知用户操作是否成功。 8. **权限管理**:自iOS 11开始,如果应用程序需要访问用户的照片库,需要在Info.plist文件中添加相应的权限声明,并在代码中...

Global site tag (gtag.js) - Google Analytics