介绍
怎么在iOS中实现一个图片水印功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强>核心代码:强>
将字符串添加到图形上下文的方法 安康;(空白)drawAtPoint:(CGPoint) point withAttributes: (nullable NSDictionary< NSAttributedStringKey,, id>, *) attrs 安康;(void)图形:(CGRect中)rect withAttributes: (nullable NSDictionary< NSAttributedStringKey,, id>, *) attrs 将字符串添加到图形上下文的方法 安康;(空白)drawAtPoint:(CGPoint)点,,,,,,,,,,,,,,, ,=//,mode kCGBlendModeNormal, alpha 1.0=, 安康;(空白)drawAtPoint:(CGPoint) point blendMode: (CGBlendMode) blendMode α:α(CGFloat); , 安康;(void)图形:(CGRect中)矩形;,,,,,,,,,,,,,,, ,=//,mode kCGBlendModeNormal, alpha 1.0=, 安康;(void)图形:(CGRect中)rect blendMode: (CGBlendMode) blendMode α:(CGFloat)α;
<>强基本步骤:强>
//1只,要手动创建一个位图上下文,创建位图上下文时,要指定大小,指定的大小,决定着生成图片的尺寸是多大 void UIGraphicsBeginImageContext (CGSize 大小); ,//2只把内容绘制到上下文当中//2.1绘制原始图片//2.2绘制文字//2.3绘制的标志 ,//3只从上下文当中生成一张图片,把上下文当中绘制的所有内容合成在一起生成一张跟上下文尺度一样的图片 UIImage * newImage =, UIGraphicsGetImageFromCurrentImageContext (),; ,//4 .手动创建的上下文一定要手动去销毁掉 UIGraphicsEndImageContext (),,
<强>封装的实例代码:强>
SWWaterMarkImage。h
# import & lt; UIKit/UIKit.h> , NS_ASSUME_NONNULL_BEGIN , @interface SWWaterMarkImage :用户界面图像 ——(UIImage *) WaterImageWithImage:(UIImage *) image ImageLogo: (UIImage *) imageLogo 标题:(NSString *) string ; + (UIImage *) WaterImageWithImage:(UIImage *) image ImageLogo: (UIImage *) imageLogo 标题:(NSString *) string ; @end , NS_ASSUME_NONNULL_END
SWWaterMarkImage。m
@implementation SWWaterMarkImage ——(UIImage *) WaterImageWithImage:(UIImage *) image ImageLogo: (UIImage *) imageLogo 标题:(NSString *) string { ,,//1。要手动创建一个位图上下文 ,UIGraphicsBeginImageContext (image.size),; ,,//2。绘制到内容上下文中 ,//原始图片渲染 ,[image 图形:CGRectMake (0, 0, image.size.width,, image.size.height)]; ,, ,//文字 ,NSDictionary * attributeDict =, @ { ,,,,,,,,NSFontAttributeName :, (UIFont systemFontOfSize: 20. f), ,,,,,,,,NSForegroundColorAttributeName: [UIColor whiteColor],//,,,,,,,,,NSBackgroundColorAttributeName : [UIColor redColor] ,,,,,,,,},; ,CGRect rectSize =, [string boundingRectWithSize: CGSizeMake (MAXFLOAT, 30),选择:NSStringDrawingUsesDeviceMetrics 属性:attributeDict 上下文:nil),; ,CGFloat x =, image.size.width 作用;rectSize.size.width 作用;10,; ,CGFloat y =, image.size.height 作用;30,; ,(string drawAtPoint: CGPointMake (x, y), withAttributes: attributeDict],; ,, ,//标志图片 ,CGFloat waterW =, 30; ,CGFloat waterH =, 30; ,CGFloat waterX =, x 作用;waterW 作用;10,; ,CGFloat waterY =, y 作用;3,; ,[imageLogo 图形:CGRectMake (waterX,水汪汪的,,waterW,, waterH)],; ,//3。从当前的上下文当中生成一张新的图片 ,UIImage * newImage =, UIGraphicsGetImageFromCurrentImageContext (),; ,,//4。手动创建的上下文一定要手动去销毁掉 ,UIGraphicsEndImageContext (),; ,, ,return newImage ; } , + (UIImage *) WaterImageWithImage:(UIImage *) image ImageLogo: (UIImage *) imageLogo 标题:(NSString *) string { ,return [[self alloc] WaterImageWithImage: image ImageLogo: imageLogo 标题:字符串),; } @end
ViewController。m
# import “ViewController.h" # import “SWWaterMarkImage.h" @interface ViewController () @ property(原子、强)UIImageView * imageView ; @end , @implementation ViewController , 安康;(空白)viewDidLoad { ,[super viewDidLoad]; ,, ,//生成一张加水印图片步骤: ,/* ,,可以在任何方法中生成图片,不一定在绘制矩形:方法中生成 1 .要才能手动创建一个位图上下文,创建位图上下文时,要指定大小,指定的大小,决定着生成图片的尺寸是多大 2。才能把内容绘制到上下文当中 3。才能从上下文当中生成一张图片,把上下文当中绘制的所有内容合成在一起生成一张跟上下文尺度一样的图片 4 .手才能动创建的上下文一定要手动去销毁掉 ,*/} null null null null null null null null null null null null怎么在iOS中实现一个图片水印功能