ios 基本圖形的繪製 基於bitmap 位元影像

來源:互聯網
上載者:User

標籤:blog   class   code   c   ext   color   

內容包括 圖片浮水印,圖片裁剪,螢幕,背景平鋪

1、圖片浮水印功能

#import "UIImage+MJ.h"@implementation UIImage (MJ)+ (instancetype)waterImageWithBg:(NSString *)bg logo:(NSString *)logo{    UIImage *bgImage = [UIImage imageNamed:bg];        // 1.建立一個基於位元影像的上下文(開啟一個基於位元影像的上下文)    UIGraphicsBeginImageContextWithOptions(bgImage.size, NO, 0.0);        // 2.畫背景    [bgImage drawInRect:CGRectMake(0, 0, bgImage.size.width, bgImage.size.height)];        // 3.畫右下角的浮水印    UIImage *waterImage = [UIImage imageNamed:logo];    CGFloat scale = 0.2;    CGFloat margin = 5;    CGFloat waterW = waterImage.size.width * scale;    CGFloat waterH = waterImage.size.height * scale;    CGFloat waterX = bgImage.size.width - waterW - margin;    CGFloat waterY = bgImage.size.height - waterH - margin;    [waterImage drawInRect:CGRectMake(waterX, waterY, waterW, waterH)];        // 4.從上下文中取得製作完畢的UIImage對象    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();        // 5.結束上下文    UIGraphicsEndImageContext();        return newImage;}@end
調用

     // 1.返回浮水印圖片    UIImage *newImage = [UIImage waterImageWithBg:@"scene" logo:@"logo"];        // 2.顯示圖片    self.iconView.image = newImage;

2、圖片裁剪

#import "UIImage+MJ.h"@implementation UIImage (MJ)+ (instancetype)circleImageWithName:(NSString *)name borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)borderColor{    // 1.載入原圖    UIImage *oldImage = [UIImage imageNamed:name];        // 2.開啟上下文    CGFloat imageW = oldImage.size.width + 2 * borderWidth;    CGFloat imageH = oldImage.size.height + 2 * borderWidth;    CGSize imageSize = CGSizeMake(imageW, imageH);    UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0);        // 3.取得當前的上下文    CGContextRef ctx = UIGraphicsGetCurrentContext();        // 4.畫邊框(大圓)    [borderColor set];    CGFloat bigRadius = imageW * 0.5; // 大圓半徑    CGFloat centerX = bigRadius; // 圓心    CGFloat centerY = bigRadius;    CGContextAddArc(ctx, centerX, centerY, bigRadius, 0, M_PI * 2, 0);    CGContextFillPath(ctx); // 畫圓        // 5.小圓    CGFloat smallRadius = bigRadius - borderWidth;    CGContextAddArc(ctx, centerX, centerY, smallRadius, 0, M_PI * 2, 0);    // 裁剪(後面畫的東西才會受裁剪的影響)    CGContextClip(ctx);        // 6.畫圖    [oldImage drawInRect:CGRectMake(borderWidth, borderWidth, oldImage.size.width, oldImage.size.height)];        // 7.取圖    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();        // 8.結束上下文    UIGraphicsEndImageContext();        return newImage;}@end
調用

- (void)viewDidLoad{    [super viewDidLoad];        UIImage *newImage = [UIImage circleImageWithName:@"me" borderWidth:3 borderColor:[UIColor whiteColor]];    self.iconView.image = newImage;        NSData *data = UIImagePNGRepresentation(newImage);    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"new.png"];    [data writeToFile:path atomically:YES];}

3、螢幕

#import "UIImage+MJ.h"@implementation UIImage (MJ)+ (instancetype)captureWithView:(UIView *)view{    // 1.開啟上下文    UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0);        // 2.將控制器view的layer渲染到上下文    [view.layer renderInContext:UIGraphicsGetCurrentContext()];        // 3.取出圖片    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();        // 4.結束上下文    UIGraphicsEndImageContext();        return newImage;}@end

調用

- (IBAction)clip {    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{        // 1.捕捉        UIImage *newImage = [UIImage captureWithView:self.view];                // 2.寫檔案        NSData *data = UIImagePNGRepresentation(newImage);        NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"new.png"];        [data writeToFile:path atomically:YES];    });}

4,背景展開

- (void)imageBg{    UIImage *oldImage = [UIImage imageNamed:@"me"];        UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0.0);    [oldImage drawInRect:self.view.bounds];    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();        self.view.backgroundColor = [UIColor colorWithPatternImage:newImage];}

5、背景平鋪

- (void)viewDidLoad{    [super viewDidLoad];    //    self.view.backgroundColor = [UIColor redColor];        // 1.建立一行背景圖片    CGFloat rowW = self.view.frame.size.width;//    CGFloat rowH = 40;    CGFloat rowH = 30;    UIGraphicsBeginImageContextWithOptions(CGSizeMake(rowW, rowH), NO, 0.0);        CGContextRef ctx = UIGraphicsGetCurrentContext();    // 畫矩形框    [[UIColor redColor] set];    CGContextAddRect(ctx, CGRectMake(0, 0, rowW, rowH));    CGContextFillPath(ctx);        // 2.畫線    [[UIColor greenColor] set];    CGFloat lineWidth = 2;    CGContextSetLineWidth(ctx, lineWidth);    CGFloat dividerX = 0;    CGFloat dividerY = rowH - lineWidth;    CGContextMoveToPoint(ctx, dividerX, dividerY);    CGContextAddLineToPoint(ctx, rowW - dividerX, dividerY);    CGContextStrokePath(ctx);        // 3.取圖    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();        // 4.結束上下文    UIGraphicsEndImageContext();        // 5.設定為背景    self.textView.backgroundColor = [UIColor colorWithPatternImage:newImage];}




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.