美文网首页
CoreText绘制水印

CoreText绘制水印

作者: Joshua520 | 来源:发表于2017-03-17 10:36 被阅读62次

近期有同事拿别人手机打卡记录申述考勤异常,鉴于此,需要在考勤记录添加工号全图倾斜水印来防伪,在网上找了一些博客,都是使用老的方法直接在图片上绘制水印,都能实现需要的效果,但是其中使用的方法在iOS7已经废弃掉了,apple给的建议是使用CoreText来代替。(直接在图片绘制水印参见blog:http://blog.csdn.net/jiadabin/article/details/51669497)。接下来谈谈使用CoreText绘制水印。

1、创建一个继承自UIView的类,重写drawRect

- (void)drawRect:(CGRect)rect {

// Drawing code

[super drawRect:rect];

self.backgroundColor = [UIColor lightGrayColor];

// 得到当前用于绘制画布的上下文,用于后续将内容绘制在画布上

CGContextRef context = UIGraphicsGetCurrentContext();

//翻转当前的坐标系(因为对于底层绘制引擎来说,屏幕左下角为(0,0))

CGContextSetTextMatrix(context, CGAffineTransformIdentity);

CGContextTranslateCTM(context, 0, self.bounds.size.height);

CGContextScaleCTM(context, 1.0, -1.0);

//绘制背景图片

CGContextDrawImage(context, self.bounds, self.image.CGImage);

//创建绘制文字

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:self.waterText];

[attrString addAttribute:(id)kCTForegroundColorAttributeName value:[UIColor colorWithRed:31/255.0 green:233/255.0 blue:189/255.0 alpha:0.3] range:NSMakeRange(0, attrString.length)];

CGFloat fontSize = 18;

CTFontRef fontRef = CTFontCreateWithName((CFStringRef)@"ArialMT", fontSize, NULL);

[attrString addAttribute:(id)kCTFontAttributeName value:(__bridge id)fontRef range:NSMakeRange(0, attrString.length)];

CFRelease(fontRef);

//旋转画布

CGContextRotateCTM(context, 30*M_PI/180);

//根据NSAttributedString创建CTFramesetterRef

CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrString);

//获取绘制文字的尺寸

CGSize size = [attrString size];

//画布的长宽

int w = self.bounds.size.width;

int h = self.bounds.size.height;

//绘制文本行和列

int row = w/size.width;

int col = h/size.height;

//整个画布绘制文本

for (int i = 0; i<=row; i++) {;

for (int j = 0; j<=col; j++) {

//创建绘制区域CGPathRef

CGMutablePathRef path = CGPathCreateMutable();

CGPathAddRect(path, NULL, CGRectMake((size.width + 25) * i, j *(size.height + 20), size.width, size.height));

//根据CTFramesetterRef和CGPathRef创建CTFrame;

CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, [attrString length]), path, NULL);

//绘制

CTFrameDraw(frame, context);

CFRelease(frame);

CFRelease(path);

}

}

CFRelease(frameSetter);

}

2、截取绘制View界面生成图片。

WaterLogoView *waterImageView = [[WaterLogoView alloc] initWithImage:[UIImage imageNamed:@"bg_dark"] waterText:@"123456"];

UIGraphicsBeginImageContext(CGSizeMake(kScreenWidth, kScreenHeight));

[waterImageView.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

3、初始化UIImageView,使用上述生成的图片。

UIImageView *bgIV = [[UIImageView alloc] initWithFrame:self.view.bounds];

[bgIV setImage:viewImage];

4、把bgIV添加到当前视图View上。

[self.view addSubview:bgIV];

相关文章

  • CoreText绘制水印

    近期有同事拿别人手机打卡记录申述考勤异常,鉴于此,需要在考勤记录添加工号全图倾斜水印来防伪,在网上找了一些博客,都...

  • CoreText Demo1 文本

    CoreText对文本和图片的绘制是依赖NSAttributedString属性字符串的,CoreText的绘制过...

  • CoreText绘制富文本

    CoreText的绘制(使用CTFrameDraw直接绘制) 简述:通过NSAttributedString来绘制...

  • YYText 源码剖析:CoreText 与异步绘制

    系列文章:YYText 源码剖析:CoreText 与异步绘制YYAsyncLayer 源码剖析:异步绘制YYCa...

  • CoreText应用之代码详细篇

    如何使用CoreText CoreText是需要自己处理绘制,不像UILabel等最上层的控件 ,所以我们必须在d...

  • 2018-04-26

    ###富文本 CoreText绘制富文本 coreText 起初是为OSX设计的,而OSX得坐标原点是左下角,y轴...

  • 【iOS开发UI篇】绘制弧形文字

    本文介绍了使用苹果提供的CoreText框架绘制出弧形效果文字的方法 CoreText是由苹果官方提供的文本引擎,...

  • CoreText绘制文本

  • CoreText 学习笔记(下)

    唐巧原博客地址:基于 CoreText 的排版引擎:进阶 | 唐巧的博客 前篇写了CoreText绘制纯文本的学习...

  • CoreText(二、文本绘制)

    前言:今天介绍绘制文本的流程和需要要到 CoreText 中的类库。 绘制流程 1、使用 UIGraphicsGe...

网友评论

      本文标题:CoreText绘制水印

      本文链接:https://www.haomeiwen.com/subject/autenttx.html