UIImage, CGImageRef, CIImageUIImage

Discussion

该访求查找系统缓存的指定名字的图样对象并回最符合当下屏幕的该图片的变量.
如果缓存中连没匹配的图对象,
该方法会定位并加载硬件还是有效的资源目录中该图的数, 并返回结果对象.

网可能在任意时刻去破除图片缓存数据以自由内存.
缓存的图样数遭到只有当前从来不给采取的会受免去

在iOS9及其后, 该办法是线程安全.

Overview

图片定义:An object that manages image data in your app. An image object
may contain a single image or a sequence of images you intend to use in
an animation.

图表用途之一:Draw an image directly into a view or other graphics
context.

尽管支持具有品类图片,但是建议采取PNG和JPEG。这有限种植类型且优化了,性能更好。尤其PNG是不管损格式,墙裂推荐使用。

<p>

图片于

isEqual: 方法是判断两独图片的图数是否一致之绝无仅有可靠方法.
即使通过同样的图样数缓存来创造的Image对象为有或是例外之.
唯一会看清它们是不是相同的方法是以 isEqual: 方法,
通过比较实的图样数据.

// 加载同一张图片两次
UIImage* image1 = [UIImage imageNamed:@"MyImage"];
UIImage* image2 = [UIImage imageNamed:@"MyImage"];

// image对象是不同的, 但是它们的内容是一样的
if ([image1 isEqual:image2]) {
   // 直接对比两张图片的数据
}

if (image1 == image2) {
   // 直接进行比较是无效的, 并没有对图片数据进行对比
}

Accessing the Image Data

CGImageCIImage 属性分别是 Core Graphics 和 Core Image
的图纸数。也堪运用 UIImagePNGRepresentation
UIImageJPEGRepresentation 函数生成一个分包 PNG 或 JPEG 格式图片数的
NSData 对象。

<p>

依据图片名创建

<p>

Discussion

而你打一个号包含@2X修饰的文件被加载图片, 则scale会被安装成2.0.
您呢得以于打Core Graphics
Image初始化一摆放图纸时直显式的指定拉伸系数(scale factor).
所有其他的图形都如其牵涉伸系数也1.0.
如若您将图纸的逻辑尺寸(保存在size属性中)乘以拉伸比例(scale属性),
会得到图片实际的比如说素尺寸.


Creating and Initializing Image Objects

<p>

+ (UIImage *)imageWithContentsOfFile:(NSString *)path;

// demo
NSString *path = [[NSBundle mainBundle]pathForResource:@"demo" ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
  • 假如创建图片失败会回到 nil。
  • 免会见缓存 image 对象。

<p>

+ (UIImage *)imageWithData:(NSData *)data;

// demo
NSString *path = [[NSBundle mainBundle]pathForResource:@"demo" ofType:@"png"];
NSData *data = [NSData dataWithContentsOfFile:path];
UIImage *image = [UIImage imageWithData:data]; 
  • 假使创建图片失败会回去 nil。
  • 不会见缓存 image 对象。

<p>

+ (UIImage *)imageWithData:(NSData *)data 
                     scale:(CGFloat)scale;

// demo
// 以为是放大十倍,结果是缩小了十倍。但是image.cgImage大小不变
image = [UIImage imageWithData:data scale:10]; // po image.size: (width = 64, height = 38.6)
image = [UIImage imageWithData:data scale:1]; //  po image.size: (width = 640, height = 386)
  • 若是创建图片失败会回到 nil。
  • 无见面缓存 image 对象。
  • scale 是比例因子,会影响 size 的价。1.0常,图片的 size
    和诸如素尺寸相等。2.0经常,size
    是诸如素尺寸的一半。屏幕大小非变换,分辨率越强,显示的图纸越聊。想象10个人排队,每排2民用和各排1只人之长是差的。

<p>

+ (UIImage *)imageWithCGImage:(CGImageRef)cgImage;

+ (UIImage *)imageWithCGImage:(CGImageRef)cgImage 
                        scale:(CGFloat)scale 
                  orientation:(UIImageOrientation)orientation;


// demo
UIImage *image = [UIImage imageNamed:@"demo"];
// 图片截取
CGImageRef cgImage = CGImageCreateWithImageInRect(image.CGImage,CGRectMake(0, 0, 1000, 1000)); 
image = [UIImage imageWithCGImage:cgImage];
// UIImageOrientationUpMirrored 是图片向上并水平翻转
image = [UIImage imageWithCGImage:cgImage scale:1 orientation:UIImageOrientationUpMirrored];
CGImageRelease(cgImage); // 释放内存
  • 采取 Quartz image 创建图片,失败返回 nil。
  • image​Ref 是 Quartz image 对象,可以使 Core Graphics framework
    创建。
  • scale 是比例因子,会潜移默化 size 的值。1.0时,图片的 size
    和诸如素尺寸相等。2.0常,size
    是诸如素尺寸的一半。屏幕大小非转移,分辨率越强,显示的图纸越小。想象10个人排队,每排2私有和各排1单人之长是差之。
  • orientation 是图表展示方向,详细介绍看文末 UIImageOrientation 部分。

图片 1

图方向

<p>

+ (UIImage *)imageWithCIImage:(CIImage *)ciImage;

+ (UIImage *)imageWithCIImage:(CIImage *)ciImage 
                        scale:(CGFloat)scale 
                  orientation:(UIImageOrientation)orientation;


// demo
// 创建滤镜和CIImage
CIImage *ciImage = [CIImage imageWithData:data];
CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"]; // 创建滤镜
ciImage = [filter outputImage]; // 滤镜处理后输出图像

image = [UIImage imageWithCIImage:ciImage];
image = [UIImage imageWithCIImage:ciImage scale:1 orientation:UIImageOrientationUpMirrored];
  • ci​Image 是 Core Image 对象。
  • scale 是比例因子,会影响 size 的值。1.0时不时,图片的 size
    和诸如素尺寸相等。2.0时,size
    是比如说素尺寸的一半。屏幕尺寸不转换,分辨率越强,显示的图纸越聊。想象10独人口排队,每排2民用以及各排1个人的长度是差的。
  • orientation 是图片显示方向,详细介绍看文末 UIImageOrientation 部分。

<p>


Discussion

欠办法并无见面缓存图片


Comparing Images

自从同的图片缓存数据创建的蝇头个图片对象呢或是不同的。唯一可靠的章程是下isEqual:方法比较。

是的以及不当的于艺术:

// Load the same image twice.
UIImage* image1 = [UIImage imageNamed:@"MyImage"];
UIImage* image2 = [UIImage imageNamed:@"MyImage"];

// The image objects may be different, but the contents are still equal
if ([image1 isEqual:image2]) {
   // Correct. This technique compares the image data correctly.
}

if (image1 == image2) {
   // Incorrect! Direct object comparisons may not work.
}

<p>

Description
+ (UIImage *)imageWithContentsOfFile:(NSString *)path

Return Value

回一个新的图对象


Constants

<p>

// UIImageOrientation
typedef NS_ENUM(NSInteger, UIImageOrientation) {
    UIImageOrientationUp,            // default orientation
    UIImageOrientationDown,          // 180 deg rotation
    UIImageOrientationLeft,          // 90 deg CCW
    UIImageOrientationRight,         // 90 deg CW
    UIImageOrientationUpMirrored,    // as above but image mirrored along other axis. horizontal flip
    UIImageOrientationDownMirrored,  // horizontal flip
    UIImageOrientationLeftMirrored,  // vertical flip
    UIImageOrientationRightMirrored, // vertical flip
};


// demo
    image = [UIImage imageNamed:@"R.jpg"];
    UIImageOrientation orientation = UIImageOrientationUp;
    orientation = UIImageOrientationLeft;
    orientation = UIImageOrientationRight;
    orientation = UIImageOrientationDown;
    orientation = UIImageOrientationUpMirrored;
    orientation = UIImageOrientationLeftMirrored; // 先左右翻转再左转90°!
    orientation = UIImageOrientationRightMirrored;
    orientation = UIImageOrientationDownMirrored;
    image = [UIImage imageWithCGImage:image.CGImage scale:1 orientation:orientation];
  • 默认是 up,left 是逆时针转动90°,right 是顺时针旋转90°,down
    是转180°。
  • mirrored 是程度翻转,镜子效果(左右反而,就比如照镜子)。
  • 注释中,CW 是 顺时针 clockwise 的缩写,CCW 是 逆时针
    counterclockwise 的缩写。
  • 图文详情点这里
    UIImage​Orientation。官方文档中,带有
    left 和 right 的图形都是错的,阐述也是拂的。UpMirrored
    也摩擦了。好吧,除了 up 和 down,都擦了。比如 left 的阐述:“The image
    is rotated 90 degrees clockwise, as shown here”, 这与代码注释 “90
    deg CCW” 是矛盾的(CCW 是 逆时针 counterclockwise
    的缩写),和自我的试结果吧是矛盾的。
  • 注意,带有 mirrored
    的,都是先水平翻转,再盘!和先期旋转再水平翻转效果不一致。left、down、right
    是 up 的盘版本,left、down、right + Mirrored 是 upMirrored
    的团团转版本。代码效果使下图所示:

图片 2

图片旋转.png

<p>

// UIImageResizingMode
typedef NS_ENUM(NSInteger, UIImageResizingMode) {
    UIImageResizingModeTile,
    UIImageResizingModeStretch,
};


// demo
    image = [UIImage imageNamed:@"R.jpg"];
    UIImageResizingMode mode = UIImageResizingModeStretch; // 拉伸
    mode = UIImageResizingModeTile; // 平铺
    // 创建可变图片。当 imageView 大于 image 时,可能会拉伸或者平铺 image。
    image = [image resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:mode]; 
  • tile 是平铺,stretch 是拉伸,如图1所示。
  • image view 的 contentMode 会影响拉伸效果。当 contentMode 不是
    UIViewContentModeScaleToFill、UIViewContentModeScaleAspectFit、UIViewContentModeScaleAspectFill
    时,图片未会见拉伸,但恐怕会见平铺。
  • 本 UIImageResizingModeTile 和 UIViewContentModeCenter
    搭配使用,image view 比图片大群就是见面以中段平铺多摆放图片,如图2所显示。

图片 3

希冀1 平铺和拉伸

图片 4

图2 contentMode 的影响

<p>

// UIImage​Rendering​Mode
typedef NS_ENUM(NSInteger, UIImageRenderingMode) {
    UIImageRenderingModeAutomatic,          // Use the default rendering mode for the context where the image is used
    UIImageRenderingModeAlwaysOriginal,     // Always draw the original image, without treating it as a template
    UIImageRenderingModeAlwaysTemplate,     // Always draw the image as a template image, ignoring its color information
} NS_ENUM_AVAILABLE_IOS(7_0);


// demo
  UIImage *myImage = [UIImage imageNamed:@"myImageFile.png"];
  myImage = [myImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
  • 默认是 automatic,根据上下文自动选择 original 或者 template。
  • original 是绘制原图。
  • template 是忽视图片颜色信息(通过 tintColor
    重新上色),作为一个晶莹剔透底模版图片来绘制。
  • 模板图片可以清楚吧无色的,用 tint color
    重新上色的图样。一些视图,比如 navigation bars, tab bars, toolbars,
    segmented controls,它们的 foreground images 自动使用模板图片,
    background images 自动使用本图片。另一些视图,比如 image views 和
    web views,自动使用原来图片。因此设置导航栏图标默认是蓝色,因为它们的
    tint color
    是蓝色。关于模板图片,点这里。

<p>


通过图片路径创建

  • UIImage 里面或者含有 CGImage 和 CIImage 数据,是 UIKit 框架的目标。
  • CIImage 不是图表,虽然涵盖了 CGImage 数据,但它只是是讲述 Core Image
    filters 处理或来图片的长河。是 Core Image 框架的靶子。Core Image
    框架专门处理和分析图,比如加滤镜效果。
  • CGImage 才是图表数,是 Core Graphics 框架的目标。Core Graphics
    框架下 Quartz 2D
    技术进行图纸绘制和转换、离屏渲染、图片创建、图层蒙版、创建 PDF
    文档等。
  • CIImage 和 CGImage 就比如菜谱和菜的别。CIImage
    是菜单,描述如何跟用啊材料做相同志菜肴,而 CGImage 才是可吃的小菜。
Discussion
 该方法会不缓存图片对象. 可以使用Core Graphics框架中对应方法来创建Quartz图片引用

先对比3个概念 UIImage、CImage、CGImage:

Description
+ (UIImage *)imageWithCGImage:(CGImageRef)cgImage

创并返跟指定的Quartz图片所对应的UIImage图片对象

Symbols


Discussion

图表的矛头会影响图片数进行绘图时之方式. 默认情况下,
图片是”向达”的自由化拓展亮的.
如果图片有和的干的初数据(metadata)(比如EXIF信息),
则该属性包含了状元数据所指示的方向. 该属性之可用参数类型列表,
可以查看UIImageOrientation

typedef enum {
   UIImageOrientationUp,
   UIImageOrientationDown , 
   UIImageOrientationLeft ,   
   UIImageOrientationRight ,  
   UIImageOrientationUpMirrored ,  
   UIImageOrientationDownMirrored ,  
   UIImageOrientationLeftMirrored , 
   UIImageOrientationRightMirrored , 
} UIImageOrientation;
  • UIImageOrientationUp
    默认的图方向, 图片正面朝上绘制.
UIImageOrientationUp
  • UIImageOrientationDown
    图表转180度.
UIImageOrientationDown
  • UIImageOrientationLeft
    图表顺时针旋转90度过.

    UIImageOrientationLeft

  • UIImageOrientationRight
    图逆时针转动90度.

UIImageOrientationRight
  • UIImageOrientationUpMirrored
    坐UIImageOrientationUp方向进行绘图图片的镜面反射版本.
    也就算是沿Y轴进行水平翻转.
UIImageOrientationUpMirrored
  • UIImageOrientationDownMirrored
    因UIImageOrientationDown方向进行绘图图片的镜面反射版本.
    也即是本着Y轴进行水平翻转.
UIImageOrientationDownMirrored.jpg
  • UIImageOrientationLeftMirrored
    盖UIImageOrientationLeft方向拓展绘图图片的镜面反射版本.
    相当给用”Up”方向图片沿着Y轴水平翻转, 再逆时针旋转90.
UIImageOrientationLeftMirrored
  • UIImageOrientationRightMirrored
    坐UIImageOrientationRight方向进行绘图图片的镜面反射版本.
    相当给将”Up”方向图片沿着Y轴水平翻转, 再顺时针旋转90.
UIImageOrientationRightMirrored

Defining a Stretchable Image

使用resizableImageWithCapInsets: 或者
resizableImageWithCapInsets:resizingMode:法创建而拉伸图片,参数insets分割图片也2~9单部分。如图1所展示,4独趋势非零的inset把图片分割为9个组成部分。

图片 5

Figure 1 Using insets to define stretchable regions

inset定义了4个方形盖子,top、left、bottom、right,被壳盖住的局部非给拉伸。top、bottom保证在直方向不受牵涉伸,left、right保证在档次方向不被拉伸。图2的4只角是无会见叫关伸的,每个箭头表示该区域允许让拉伸的自由化。

Each inset defines the potion of the image that does not stretch in
the given dimension. The regions inside an image’s top and bottom
insets maintain a fixed height, and the areas inside the left and
right insets maintain a fixed width. Figure 2 shows how each part of a
nine-part image stretches as the image itself is stretched to fill the
available space. The corners of the image do not change size because
they are inside both a horizontal and vertical inset.

图片 6

Figure 2 Stretchable portions of a nine-part image

<p>

Image的属性

Creating Specialized Image Objects

<p>

+ (UIImage *)animatedImageNamed:(NSString *)name 
                       duration:(NSTimeInterval)duration;
  • 创造一个动态图(animated image)。
  • name 是一对还是整的公文路径,不带来后缀名(The full or partial path to
    the file (sans suffix))。可以是华语。
  • duration 是卡通播放周期。
  • 函数会加载一系列 name + 数字 组成名字的图纸,比如 name 是
    “image”,会加载 image0,image1,……,一直顶 image1024。如果少
    image5,那么 image6之后的图样都非会见加载。
  • 数字从 0 或者 1 开始,但是如果连接。加载图片的 scale 和 size
    属性要当。

<p>

+ (UIImage *)animatedImageWithImages:(NSArray<UIImage *> *)images 
                            duration:(NSTimeInterval)duration;
  • 从今一个图片数组创建一个动态图(animated image)。
  • images 是含有图表的数组。
  • duration 是卡通播放周期。
  • 数组中图纸的 scale 和 size 属性要当。

<p>

+ (UIImage *)animatedResizableImageNamed:(NSString *)name 
                               capInsets:(UIEdgeInsets)capInsets 
                                duration:(NSTimeInterval)duration;
  • 创办一个不过拉伸的动态图。
  • name 是一对还是整的公文路径,不带来后缀名(The full or partial path to
    the file (sans suffix))。可以是汉语。
  • cap​Insets 是保安图片某些位置不让关伸的矩形帽子。
  • duration 是动画片播放周期。
  • 函数会加载一多元 name + 数字 组成名字的图,比如 name 是
    “image”,会加载 image0,image1,……,一直到 image1024。如果缺乏
    image5,那么 image6之后的图片都不见面加载。
  • 数字从 0 或者 1 开始,但是一旦连。加载图片的 scale 和 size
    属性要当。
  • 牵连伸模式默认是平铺(UIImageResizingModeTile)。详细介绍看文末的
    UIImageResizingMode 部分。

<p>

+ (UIImage *)animatedResizableImageNamed:(NSString *)name 
                               capInsets:(UIEdgeInsets)capInsets 
                            resizingMode:(UIImageResizingMode)resizingMode 
                                duration:(NSTimeInterval)duration;
  • 创办一个不过拉伸的动态图。
  • name 是一对还是整的公文路径,不带来后缀名(The full or partial path to
    the file (sans suffix))。可以是汉语。
  • cap​Insets 是保障图片某些位置不让关伸的矩形帽子。
  • resizing​Mode 是关伸模式,平铺或者拉伸。详细介绍看文末的
    UIImageResizingMode 部分。
  • duration 是卡通片播放周期。
  • 函数会加载一多级 name + 数字 组成名字的图样,比如 name 是
    “image”,会加载 image0,image1,……,一直顶 image1024。如果缺乏
    image5,那么 image6之后的图形都未会见加载。
  • 数字从 0 或者 1 开始,但是一旦连接。加载图片的 scale 和 size
    属性要当。
  • 无非生拉伸模式一旦动 UIImageResizingModeStretch
    时,才调整用该函数,否则调用上面的函数
    animated​Resizable​Image​Named:​cap​Insets:​duration:。

<p>

- (UIImage *)imageFlippedForRightToLeftLayoutDirection;
  • 回的 image 并无转,只是把 flipsForRightToLeftLayoutDirection
    属性设置也 YES,该属性是独读的。
  • 当系统语言决定布局方向而打右侧为左,或者 image view 的
    semanticContentAttribute 属性设置为
    UISemanticContentAttributeForceRightToLeft 时, image
    才会展现呢扭转的。在由错误为右侧布局之条件受到,image
    表现也免翻转。比如在炎黄,文字是于左望右侧读的,通过该法创建的 image
    是匪翻转的,除非修改 image view 的上述特性。

</br>

- (UIImage *)imageWithRenderingMode:(UIImageRenderingMode)renderingMode;

// demo
  UIImage *myImage = [UIImage imageNamed:@"myImageFile.png"];
  myImage = [myImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
  • 创造并返回一个特定渲染模式之 image。
  • image 的 renderingMode
    属性是止念之,通过该函数创建一个新的渲染模式之 image。
  • renderingMode
    有3种:UIImageRenderingModeAutomatic、UIImageRenderingModeAlwaysOriginal、UIImageRenderingModeAlwaysTemplate。默认是
    automatic,根据上下文自动选择 original 或者 template;original
    是绘制原图;template 是忽视图片的水彩信息(通过 tintColor
    重新上色),作为一个晶莹剔透底模板图片来绘制。
  • 模板图片可以掌握为无色的,用 tint color
    重新上色的图纸。一些视图,比如 navigation bars, tab bars, toolbars,
    segmented controls,它们的 foreground images 自动使用模板图片,
    background images 自动使用原来图片。另一部分视图,比如 image views 和
    web views,自动使用本图片。因此设置导航栏图标默认是蓝色,因为她的
    tint color
    是蓝色。有关模板图片,点这里。
  • 小结:renderingMode 对 tint color
    有影响。如果发现图片颜色不符合预期,就采用
    original;如果想由定义图片颜色,使用 template,然后设置 tint
    color。renderingMode 也可当故事板设置,如图所示。

图片 7

设置 renderingMode

<p>

- (UIImage *)imageWithAlignmentRectInsets:(UIEdgeInsets)alignmentInsets;


  // demo
  // 图片阴影在右下方,大小是20*20,所以要往右下平移
  UIEdgeInsets rInsets = UIEdgeInsetsMake(0, 0, 20, 20);
  image = [image imageWithAlignmentRectInsets:rInsets]; // 只对自动布局有效,代码布局无效
  • 始建含有一定 alignmentRectInsets 的图。
  • auto layout 是仍 alignment rectangle 来布局之。alignment rectangle
    默认和 frame 大小等,设置 alignmentRectInsets 可以改其的轻重。
  • 参数 alignmentInsets =
    (上,左,下,右),逆时针转动。正数表示向该方向动。比如 right =
    20,图片会于右平移 20。
  • 只有针对机动布局中,仅对电动布局中,仅对机关布局中。
  • 如图所示,图片被包含阴影,默认居中对一头之时节,蓝健全会向左上偏移。阴影大小也
    20*20,为了使蓝健全居中(往右边下活动),可以装 alignmentInsets = (0,
    0, 20, 20)。

图片 8

alignment rectInsets

<p>

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets;
  • 始建含有一定 cap insets 的图纸。cap insets 定义图片不可拉伸的区域。
  • 利用该措施创建的拉伸图片,iOS
    会根据图片拉伸区域之大小选择不同之渲染技术(uses different rendering
    techniques),性能为无均等:

    • 假设拉伸区域宽高都是1,or the center region of the image is 1 x
      1 pixel—iOS draws the image by stretching the 1-pixel region.
      This mode provides the fastest performance (for nonzero cap
      insets)。
    • 要是拉伸区域宽高大于1,iOS
      使用平铺,虽然性能降低,但对纹理图片(不是纯色图片)有因此。
    • 万一拉伸区域是整张图片(参数 capInsets =
      UIEdgeInsetsZero),而且图片大于1×1,iOS
      会平铺整张图片,这样于平铺图片的部分区域性能再好(This mode is
      faster than the tiling mode for nonzero cap insets)。
  • 苟于定义 resizing mode,使用函数
    resizableImageWithCapInsets:resizingMode:
  • 头文件之笺注说默认使用平铺(create a resizable version of this image.
    the interior is tiled when
    drawn),不了解文档上面说之下不同渲染技术是啊意思。

<p>

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets 
                            resizingMode:(UIImageResizingMode)resizingMode;


    // demo
    // 拉伸图片的不同区域
    float bottom = image.size.height / 2;
    float top   =  image.size.height / 2;
    // 上,左,下,右
    UIEdgeInsets capInsets2 = UIEdgeInsetsMake(0, 0, bottom, 0); // 底部绿色区域在垂直方向上不被拉伸
    UIEdgeInsets capInsets3 = UIEdgeInsetsMake(top, 0, 0, 0); // 顶部蓝色区域在垂直方向上不被拉伸
    // 变形模式是拉伸
    UIImage *image2 = [image resizableImageWithCapInsets:capInsets2 resizingMode:UIImageResizingModeStretch];
    UIImage *image3 = [image resizableImageWithCapInsets:capInsets3 resizingMode:UIImageResizingModeStretch];
  • 创办含有一定 cap insets 和 拉伸方式的图片。
  • UIImageResizingMode 有两种,UIImageResizingModeStretch
    UIImageResizingModeTile。stretch 是拉伸,tile 是平铺。
  • 该函数和 resizableImageWithCapInsets: 是同样的,因此只有以
    UIImageResizingModeStretch
    才用该函数(意思是前者默认平铺咯?文档无力吐槽.)。
  • 如图所示,当 image view
    高度变化时,图片会跟着拉伸。可以装拉伸区域是蓝色或绿色。

图片 9

关伸图片

<p>


晚更新… 2016-05-24

Instance Methods

<p>

- (CGImageRef)CGImage;
  • The underlying Quartz image data.
  • 比方图片数为内存限制为破除了,调用该函数强制加载图片数及内存。可能会见唤起性能问题。
  • 设 UIImage 对象是经过 CIImage 对象创建的,该函数返回 NULL。

<p>

- (UIImage *)imageWithHorizontallyFlippedOrientation;
  • No overview available.
  • iOS 10 新出底,搜不至资料。

<p>

scale
@property(nonatomic, readonly) CGFloat scale

图片的拉伸系数. (只读属性)

Loading and Caching Images

<p>

+ (UIImage *)imageNamed:(NSString *)name 
               inBundle:(NSBundle *)bundle 
compatibleWithTraitCollection:(UITraitCollection *)traitCollection;
  • name 除了 PNG 图片未需要后缀名,其他项目的图片需要包含后缀名。
  • bundle 是包含图表或 image asset 的文件夹。传 nil 会搜索 main
    bundle。
  • bundle 理解也一个文书夹。利用 bundle
    对象好通过文件称访问中的资源,不需知道文书夹的组织。官方说明:Apple
    uses bundles to represent apps, frameworks, plug-ins, and many other
    specific types of content. 具体点这里
    NSBundle。
  • trait​Collection 是叙界面的特性集合,比如 size class,display
    scale,interface idiom(比如文字是起右侧为左显示的)。具体点这里
    UITrait​Collection。传
    nil 会使用 main screen 的特征。
  • 函数先以系缓存中找图片,找不交更创,可能回到
    nil。系统或者于其它时刻清理内存,但单单破不以的图。iOS
    9之后,函数是线程安全的。

图片 10

size class

<p>

+ (UIImage *)imageNamed:(NSString *)name;
  • name 对于 PNG 图片可以忽略后缀名,其他类的图需要包含后缀名。
  • 函数先以系缓存中找图片,找不交更创,可能回到
    nil。系统或者于另时刻清理内存,但单破不动的图样。iOS
    9之后,函数是线程安全的。
  • 函数会缓存图片及内存中。如果图片只展示同糟,不思量缓存图片,可以运用
    image​With​Contents​Of​File:​ 代替。

<p>


Parameters

path : 文件的一些或整路径

Creating Image Objects

只顾图片是否以bundle中、是否缓存图片、图片的采取效率:

  • Use the imageNamed:inBundle:compatibleWithTraitCollection:
    method (or the imageNamed: method) to create an image from an
    image asset or image file located in your app’s main bundle (or
    some other known bundle). Because these methods cache the image
    data automatically, they are especially recommended for images
    that you use frequently.

  • Use the imageWithContentsOfFile: or initWithContentsOfFile:
    method to create an image object where the initial data is not in
    a bundle. These methods load the image data from disk each time,
    so you should not use them to load the same image repeatedly.

  • Use the animatedImageWithImages:duration: and
    animatedImageNamed:duration: methods to create a single
    UIImage object comprised of multiple sequential images. Install
    the resulting image in a UIImageView object to create animations
    in your interface.

imageNamed:方法加载<u>在bundle中</u>的图样,缓存到内存中,适合频繁利用的图片。imageWithContentsOfFile:方法每次都起沙盒中加载图片,适合用效率低之图形。animatedImageWithImages:duration:方法创建一个是因为多摆图片做的图片,用于UIImageView播放动画。

UIImage类的其他艺术允许你于Core Graphics images or image
data创建图片以及卡通片。UIKit提供
UIGraphicsGetImageFromCurrentImageContext
方法从眼前之context中得你绘制的图纸。

留意,image对象是不可变的,属性在图纸创建之后便无能够修改了。这为意味着,它是线程安全之。

以Image assets管理图片是不过简便易行的,它可添加多个image set
,每个set包含用于不同系统版本、环境(compact or
regular)和缩放比例的图形。

除却由disk加载图片,也堪运用UIImagePickerController于摄像头或者像库获取图片,但当时得用户授权。

<p>

Discussion

该值表示图片的逻辑大小, 并将图纸时趋势考虑进去.
将size的价乘以scale属性的值好获图片的例如素尺寸.


立篇稿子是本着官方文档的求学笔记,不是翻译,对文档抽象的地方加了说及示范,对啰嗦的地方删掉。前面是概念讲解,后面是
API 讲解。重要的定义有图拉伸、动态图、图片方向、模板图片等。

size
@property(nonatomic, readonly) CGSize size

图表的逻辑尺寸, 以碰吗单位进行测量. (只念属性)

官文档点蓝色文字:UIImage、CIImage、CGImage。

CGImage

CGImageRef是均等栽基于你所提供的样本数量来代表位图(Bitmap
Image)和位图遮罩(Bitmap Image Masks)的有血有肉类型.
位图(样本)是如从的矩形阵列(Rectangular Array),
每个像素表示源图中之每个点之数量或者样本.


Drawing Images

<p>

这里涉及到 Core Graphics, 有几篇文章写的不错:
  • http://blog.csdn.net/hopedark/article/details/17761177
  • http://www.cnblogs.com/kenshincui/p/3959951.html
  • http://blog.csdn.net/u013087068/article/details/44586979

<p>

- (void)drawAtPoint:(CGPoint)point;
  • 制图图片及眼前之 graphics context。
  • point 指的图样左上角。
  • 图表的 orientation 和 context 的 transforms 对绘制有影响。
  • This method draws the image at full opacity using the
    kCGBlendModeNormal blend mode. 详情点这里
    CGBlend​Mode。

<p>

- (void)drawAtPoint:(CGPoint)point 
          blendMode:(CGBlendMode)blendMode 
              alpha:(CGFloat)alpha;
  • 动一定合成模式绘制图片及眼前之 graphics context。
  • point 指的图片左上角。
  • blend mode 指合成模式,详情点这里
    CGBlend​Mode。
  • alpha 指透明度,从0.0 ~ 1.0。0.0是了透明,1.0凡是勿透明。
  • 图形的 orientation 和 context 的 transforms 对绘制有震慑。
  • alpha 通道记录图片的透明度信息,定义透明、不透明、半透明区域。

<p>

- (void)drawInRect:(CGRect)rect;
  • 绘图图片及眼前图像上下文的特定矩形,可能会见牵涉伸图片适应矩形。
  • rect 指在 graphics context
    所当的坐标体系受到,绘制图片的矩形。图片绘制在矩形原点的右下方。
  • 图片的 orientation 和 context 的 transforms 对绘制有影响。
  • This method draws the image at full opacity using the
    kCGBlendModeNormal blend mode. 详情点这里
    CGBlend​Mode。

<p>

- (void)drawInRect:(CGRect)rect 
         blendMode:(CGBlendMode)blendMode 
             alpha:(CGFloat)alpha;
  • 用一定的合成模式,绘制图片及眼前图像上下文的一定矩形,可能会见拉伸图片适应矩形。
  • rect 指在 graphics context
    所于的坐标体系遭到,绘制图片的矩形。图片绘制在矩形原点的右下方。
  • blend mode 指合成模式,详情点这里
    CGBlend​Mode。
  • alpha 指透明度,从0.0 ~ 1.0。0.0凡完全透明,1.0凡休透明。
  • 图片的 orientation 和 context 的 transforms 对绘制出震慑。

<p>

- (void)drawAsPatternInRect:(CGRect)rect;
  • 用平铺模式,绘制图片及当下图像上下文的一定矩形中。
  • 忽略 fill color。
  • rect 指在 graphics context
    所当的坐标体系受到,绘制图片的矩形。图片绘制在矩形原点的右下方。
  • context 的 transforms 对绘制出震慑。

<p>


创造UIImage的几乎栽常见方式

Instance Properties

<p>

@property(nonatomic, readonly) UIGraphicsImageRendererFormat *imageRendererFormat;
  • No overview available.
  • iOS 10 新发的,搜不顶资料。

<p>


UIImage

Image Attributes

<p>

  • image​Orientation
    图形方向,默认是 up。如果图片有连带的 metadata (比如 EXIF
    信息),该属性由 metadata 决定。文末有 UIImageOrientation
    的详细介绍。

  • size
    图片的 logical 尺寸,单位是触发。受 image​Orientation
    影响,比如长方形图片转之后,size 会不雷同。size 和总体性 scale
    相乘得到像素尺寸。

  • scale
    比例因子。只读。如果加载的图纸发 @2x
    修饰,它的比例因子就是2.0。也堪以经 CGImage
    创建图片时指定该值。默认1.0。乘以 size 得到图片的比如素尺寸。

  • flips​For​Right​To​Left​Layout​Direction
    布尔值,表示是否翻转为 right-to-left 布局。

  • CGImage
    底层 Quartz image
    数据。如果图片数因内存限制于免除了,可以调用该方式强制加载图片数到内存中。可能会见招性能问题。如果图片是经
    CIImage 创建的,该值为 NULL。

  • CIImage
    根 Core Image 数据。如果图片是通过 CGImageRef 创建的,该值为 nil。

  • images
    勤组,保存 animated image 的持有图片。对于 non-animated
    image,该值为 nil。

  • duration
    播音 animated image 的时间周期,不是各个张图的时刻间隔。默认 0.0 。

  • cap​Insets
    概念及错下右手4单区域不被拉伸。可以理解啊4独矩形帽子,盖在图纸及,当图片于牵涉伸时,被因住的组成部分保障原来的大小与外观,只有不受以住的有些于拉伸。默认是
    UIEdge​Insets​Zero,表示拉伸整摆放图纸。可以使
    resizable​Image​With​Cap​Insets: 方法创建指定拉伸区域的拖累伸图片。

  • alignment​Rect​Insets
    简言之明了吧布局时的职平移量。布局是透过 alignment​Rect 而未是 size
    来算位置的,默认和 size 相等。影响视觉及之职位,但是未影响
    frame。上错误下右侧4只趋势,正数表示为该方向动。比如图片右侧有小幅为2底影,要如图片居中,在非改动
    frame
    的情状下,可以经此变量来向右平移2,使得图片看起是置身中的,实际它是于中等偏左。

  • image​Asset
    回到图片所在的 UIImageAsset 对象,可能啊 nil。

  • trait​Collection
    归来一个 UITraitCollection 对象。​

  • rendering​Mode
    回来一个 UIImageRenderingMode 类型的价值,默认是
    UIImageRenderingModeAutomatic​​。详细介绍请圈文末的
    UIImageRenderingMode 部分。

<p>


概述:

UIImage对象在App中管理图片数据. 使用Image对象来代表所有项目图片的数目,
UIImage类具有管理有关平台支撑之享有格式图片数的能力.
Image对象是不可修改的, 因此你连通过就有的图片数来创造它,
比如保存在硬件中的图纸文件要经编程创建的图数据.
一个Image对象涵盖单个图片或你如就此作动画的相同多样图片.

乃可行使Image对象做如下操作:

  1. 啊UIImageView对象看图片以便在界面上展示下
  2. 行使图片来自定义系统操作, 如按钮(Button),
    滚动条(Slider)和分管理(Segment)
  3. 一直当View或者其它图形上下文中绘抽图片
  4. 传递Image给任何得图片数的API

尽管Image对象支持当地平台的拥有图片格式,
但仍推荐App尽量采用PNG或JPEG格式的图片.
Image对象对PNG和JPEG格式进行了渲染和展示的优化,
相比另格式的图样提供了又好的性能. 因为PNG格式是无害的,
所以特别推荐在App的界面被使用该格式的图片.

Parameters

name : 图片文件的名字, 如果是率先软加载该图形, 该方法会在以的Main
Bundle当中查找指定名字的文件. 如果是PNG图片, 可以略文件后缀名.
其它格式的公文要写完整的名称

通过CIImage创建

通过CGImage创建

Return Value

回跟指定Quartz Image对应的新UIImage对象, 如果不能够打指定的Quartz
Image引用进行初始化, 则返回nil

Parameters

ciImage : 用来封装的Core Image对象

Description
+ (UIImage *)imageWithCIImage:(CIImage *)ciImage

创建并回包含Core Image对象的UIImage对象

Parameters

cgImage : Quartz Image对象

访问Image的数据

Image对象并没有供直接访问相关的图样数的操作. 然而,
你得博得其他格式的图纸数给App使用. 特别之,
你可以分别下CGImage和CIImage属性获取兼容Core Graphics和Core
Image的本子的图片.
你也可动用UIImagePNGRepresentation和UIImageJPEGRepressentation功能来大成包含PNG或JPEG的图纸数的NSData对象.


EXIF(Exchangeable Image File Format)

可是交换图像文件格式, 可记下照片的性信息(宽度, 高度,
方向等)和拍摄数据(图片数). EXIF可叠加给JPEG, TIFF, RIFF等公事里,
但PNG格式的图像不保险含.


Description
+ (UIImage *)imageNamed:(NSString *)name

CIImage

CIImage类用于描述一摆图片. CoreImage的图样是不可变的.
通过将CIImage对象及另外Core Image的类(比如CIFilter, CIContext, CIVector,
和CIColor)结合, 实现应用Core Image内建的滤镜来进展图片处理.
根据多种来源提供的数来创造CIImage对象, 包括Quartz 2D, Core
Video图像缓存(CVImageBufferRef), 基于URL的目标, 和NSData对象.
尽管CIImage对象具备与之提到的图数, 但本质上连无是平等摆图片.
你可它CIImage对象呢一个图的”配方”.
CIImage对象拥有特别成一摆放图纸所拥有的装有消息, 但Core
Image并无会见真正的去渲染一摆图片, 除非深受求这么做. 这种”延迟计算(lzay
evaluation)”方式让Core Image的操作尽可能的赛效.
CIContext和CIImage对象还是不可修改的,
意味着它们得以于线程之间安全的旅享.
多独线程可以采用相同的GPU或者CPU的CIContext对象来渲染CIImage对象. 然而,
CIFilter对象的事态则不同, 它是足以被改的.
CIFilter对象非克以线程之间安全的共同享. 如果你的App是支持多线程的,
每一个线程都急需创造好之CIFilter对象. 否则App的所作所为拿超你的意料.
Core Image提供了啊图分析普遍缺陷并机关调整修复的方法.
提供平等多样用来纠正这些不足之过滤镜. 通过也滤镜预设相关价值, 实现而变更色调,
饱合度, 对比度, 阴影, 去除红眼或外闪光伪迹, 来提高图片的质量.

Special Considerations

假定您的图形文件才需要展示同一坏并包它们不待加上到系统的休息存当中.
你应有使 imageWithContentsOfFile: 方法来创造图片.
这会给单次使用的图形未会见受网缓存, 从而潜在的增长App内存以的特性.


imageOrientation
@property(nonatomic, readonly) UIImageOrientation imageOrientation

图形的方向. (只读属性)