圖片拉伸API分析
成都創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元疏附做網(wǎng)站,已為上家服務(wù),為疏附各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
– (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode NS_AVAILABLE_IOS(6_0);
UIEdgeInsets,可以通過設(shè)置UIEdgeInsets的left、right、top、bottom來分別指定左端蓋寬度、右端蓋寬度、頂端蓋高度、底端蓋高度。
UIImageResizingMode枚舉:
UIImageResizingModeStretch:拉伸模式,通過拉伸UIEdgeInsets指定的矩形區(qū)域來填充圖片。
UIImageResizingModeTile:平鋪模式,通過重復(fù)顯示UIEdgeInsets指定的矩形區(qū)域來填充圖片。
1/7
首先,打開手機(jī)里的照片合集
2/7
然后選中自己想要裁剪的圖片,打開它
3/7
輕點(diǎn)圖片,右上角有一個(gè)“編輯”,選中他
4/7
在編輯界面里,左下角有一個(gè)“裁剪”的標(biāo)志,已經(jīng)用紅色線給大家圈出來了,看下邊的圖片提示哦
5/7
用手按照左下角或者是右下角往上滑動(dòng),直到自己滿意的位置暫停即可
6/7
完事后,點(diǎn)擊完成即可,然后成品就出來啦
7/7
對(duì)比圖給大家了,大家可以看下哦!
在 iOS 開發(fā)過程中,對(duì)圖片的處理不僅僅局限于顯示、渲染樣式,還常常遇到對(duì)view指定區(qū)域截圖,以及對(duì)圖片的壓縮、拉伸等操作。下面我們介紹一下類似的操作過程:
注:通過 UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale) 和 drawViewHierarchyInRect 的配合來截取并渲染出來的圖片位置和大小,是由前者的size和后者的rect共同決定的。 即,畫布相當(dāng)于父view,其尺寸為size,截圖繪制到畫布中的位置和尺寸為rect。
想試一試的同學(xué),可以創(chuàng)建一個(gè)demo,取不同的size和rect值,來觀察畫布和截圖的位置。也可以試著將畫布和截圖完全吻合,即將截圖完整的渲染出來,這并不難。
裁剪圖片就是對(duì)當(dāng)前的圖片按照指定的大小范圍生成一個(gè)新的圖片。需要注意的是如果當(dāng)前顯示圖片是2倍圖或者3倍圖,要么可能尺寸不對(duì),要么截出來的圖片很模糊,因此,需要在截圖前調(diào)整rect值。
注:UIImageJPEGRepresentation 兩個(gè)參數(shù):圖片引用 和壓縮系數(shù),而 UIImagePNGRepresentation 只需圖片引用作為參數(shù)。在實(shí)際使用過程中,UIImagePNGRepresentation(UIImage* image) 一般要比UIImageJPEGRepresentation(UIImage* image, 1.0) 返回的圖片數(shù)據(jù)量大,在處理圖片時(shí),若對(duì)圖片質(zhì)量要求不高,則建議使用UIImageJPEGRepresentation,根據(jù)自己的實(shí)際使用場(chǎng)景設(shè)置壓縮系數(shù),進(jìn)一步降低圖片數(shù)據(jù)量大小。
在 = iOS 5.0 時(shí),UIImage的新方法可以處理圖片的拉伸問題:
使用過程:
在 = iOS 6.0 時(shí),UIImage的新方法可以處理圖片的拉伸問題:
使用過程:
參考文章:
stretchableImageWithLeftCapWidth通常用來做圖片的局部拉伸,常用的例子是聊天的背景圖的部分拉伸
stretchableImageWithLeftCapWidth這個(gè)方法 有2個(gè)參數(shù)
leftCapWidth: 左邊不拉伸的像素
topCapHeight:上邊不拉伸的像素
參數(shù)的意義是,參數(shù)指定30,30。那么,圖片左邊30個(gè)像素,上邊30個(gè)像素。不會(huì)被拉伸,x坐標(biāo)為31的一個(gè)像素會(huì)被橫向復(fù)制,y坐標(biāo)為31的一個(gè)像素會(huì)被縱向復(fù)制。
注意:只是對(duì)一個(gè)像素進(jìn)行復(fù)制到一定寬度。而圖像后面的剩余像素也不會(huì)被拉伸。類試下面的圖片(該圖片來自網(wǎng)圖)。
另外分享Xcode中Slicing, Xcode圖片素材Slicing處理 ,同樣也能實(shí)現(xiàn)圖片的局部拉伸。
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bgImage"]];?
創(chuàng)建并設(shè)置默認(rèn)圖, 也可以
UIImageView*imageView = [[UIImageView alloc] init];
imageView.image= [UIImageimageNamed:@"bgImage"];
還可以這樣先設(shè)置imageview的大, 在設(shè)置圖片
UIImageView*imageView = [[UIImageView alloc] initWithFrame:(CGRectMake(0,144,SCREEN_Width,50))];
imageView.image= [UIImageimageNamed:@"bgImage"];
由此可看imageview的frame可以這樣設(shè)置
imageView.frame=CGRectMake(0,144,SCREEN_Width,50);
通常我們使用的的imageview都會(huì)添加圓角邊框
imageView.layer.masksToBounds = YES;
imageView.layer.cornerRadius=25;
imageView.layer.borderColor = [UIColor blueColor].CGColor;
imageView.layer.borderWidth=1;
這個(gè)圓角和邊框像view和label以及button的設(shè)置方式都是一樣的 當(dāng)然imageview也一樣
imageView.backgroundColor= [UIColorclearColor]; 圖片設(shè)置背景顏色, 我通常使用clearColor ?透明
?imageView.userInteractionEnabled = YES; 圖片設(shè)置成可交互, 設(shè)置為NO則不能交互
[self.viewaddSubview: imageView]; 添加視圖也可叫做顯示視圖
設(shè)置圖片內(nèi)容的布局方式 imageView.contentMode
這個(gè)屬性是用來設(shè)置圖片的顯示方式,如居中、居右,是否縮放等
imageView.contentMode = UIViewContentModeScaleAspectFit;
UIViewContentMode contentMode枚舉類型
? ? (1)? UIViewContentModeScaleToFill; ? ??默認(rèn),對(duì)圖片進(jìn)行拉伸處理(不是按比例),是充滿bouns
? (2)? UIViewContentModeScaleAspectFit; ? ??按原圖比例進(jìn)行拉伸,是圖片完全展示在bouns中
? ? (3)? UIViewContentModeScaleAspectFill; ? ??按原圖比例填充,使圖片展示在bouns中,可能只顯示部分
? ? (4)? UIViewContentModeRedraw; ? ??重劃邊界變化(重設(shè) - setNeedsDisplay)
? ? (5)? UIViewContentModeCenter; ? ??圖片顯示在imageview的正中間,原圖大小
? ? (6)? UIViewContentModeTop; ? ??圖片顯示在imageview的上部,原圖大小
? ? (7)? UIViewContentModeBottom; ? ??圖片顯示在imageview的下部,原圖大小
? ? (8)? UIViewContentModeLeft; ? ??圖片顯示在imageview的左部,原圖大小
? ? (9)? UIViewContentModeRight; ? ??圖片顯示在imageview的右部,原圖大小
? ? (10)? UIViewContentModeTopLeft; ? ??圖片顯示在imageview的左上部,原圖大小
? ? (11)? UIViewContentModeTopRight; ? ??圖片顯示在imageview的右上部,原圖大小
? ? (12)? UIViewContentModeBottomLeft; ? ??圖片顯示在imageview的左下部,原圖大小
? ? (13)? UIViewContentModeBottomRight; ? ??圖片顯示在imageview的右下部,原圖大小
imageView.alpha = 1.0; ? ?設(shè)置圖片透明度
???NSString *path1 = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"jpg"];
???NSString *path2 = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg"];
???NSString *path3 = [[NSBundle mainBundle] pathForResource:@"3" ofType:@"jpg"];
???imageView.animationImages = @[[UIImage imageWithContentsOfFile:path1],[UIImage imageWithContentsOfFile:path2],[UIImage imageWithContentsOfFile:path3]];
???imageView.animationDuration = 5.0f; ? ?設(shè)置循環(huán)一次的時(shí)間
???imageView.animationRepeatCount = 0;? ? // 設(shè)置循環(huán)次數(shù)(0為無線循環(huán))
???[imageView startAnimating];? ? ? ? ? ? // 開始動(dòng)畫
???[imageView stopAnimating];? ? ? ? ? ? ? // 停止動(dòng)畫
NSData *imageData = [NSData dataWithContentsOfFile:path];
UIImage *image4 = [UIImage imageWithData:imageData];
NSString *path = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"jpg"];
UIImage *image2 = [UIImage imageWithContentsOfFile:path];
ImageView.hidden?=?NO;????隱藏或者顯示圖片?YES為隱藏
[ImageView?sizeToFit];????將圖片尺寸調(diào)整為與內(nèi)容圖片相同
UITapGestureRecognizer?*singleTap = [[UITapGestureRecognizer?alloc]?initWithTarget:self?action:@selector(tapImageView:)];?//?設(shè)置手勢(shì)
[ImageView?addGestureRecognizer:singleTap];?//?給圖片添加手勢(shì)