这个需求可能有时候会碰到,比如自己的照片加版权,打水印等

网上的方法,有不少感觉不全对,或者需求不是特全,这里我总结了3种场景下的需求:

1、本地图片合成文字

2、本地图片合成图片

3、网络图片先下载再合成图片

效果图:

这里的合成的size大小,我都是随便写的,没特意计算,大家可以按实际需求自定义。

代码部分:

/**
图片合成文字 @param img <#img description#>
@param logoText <#logoText description#>
@return <#return value description#>
*/
- (UIImage *)imageAddText:(UIImage *)img text:(NSString *)logoText
{
NSString* mark = logoText;
int w = img.size.width;
int h = img.size.height;
UIGraphicsBeginImageContext(img.size);
[img drawInRect:CGRectMake(, , w, h)];
NSDictionary *attr = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:], NSForegroundColorAttributeName : [UIColor redColor] };
//位置显示
[mark drawInRect:CGRectMake(, , w*0.8, h*0.3) withAttributes:attr]; UIImage *aimg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); return aimg; }
/**
本地图片合成 @param useImage <#useImage description#>
@param maskImage <#maskImage description#>
@return <#return value description#>
*/
- (UIImage *)imageAddLocalImage:(UIImage *)useImage addMsakImage:(UIImage *)maskImage
{ UIGraphicsBeginImageContextWithOptions(useImage.size ,NO, 0.0);
[useImage drawInRect:CGRectMake(, , useImage.size.width, useImage.size.height)]; //四个参数为水印图片的位置
[maskImage drawInRect:CGRectMake(, , useImage.size.width, useImage.size.height/)];
//如果要多个位置显示,继续drawInRect就行
//[maskImage drawInRect:CGRectMake(0, useImage.size.height/2, useImage.size.width, useImage.size.height/2)];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultingImage;
}
/**
下载网络图片合成 @param imgUrl <#imgUrl description#>
@param imgUrl2 <#imgUrl2 description#>
@param imgView <#imgView description#>
*/
- (void)imageAddUrlImage:(NSString *)imgUrl image2:(NSString *)imgUrl2 showinImageView:(UIImageView *)imgView
{
// 1.队列组、全局并发队列 的初始化
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); // 2.在block内部不能修改外部的局部变量,这里必须要加前缀 __block
__block UIImage *image1 = nil; // 注意这里的异步执行方法多了一个group(队列)
dispatch_group_async(group, queue, ^{
NSURL *url1 = [NSURL URLWithString:imgUrl];
NSData *data1 = [NSData dataWithContentsOfURL:url1];
image1 = [UIImage imageWithData:data1];
}); // 3.下载图片2
__block UIImage *image2 = nil;
dispatch_group_async(group, queue, ^{
NSURL *url2 = [NSURL URLWithString:imgUrl2];
NSData *data2 = [NSData dataWithContentsOfURL:url2];
image2 = [UIImage imageWithData:data2];
}); __block UIImage *fullImage;
// 4.合并图片 (保证执行完组里面的所有任务之后,再执行notify函数里面的block)
dispatch_group_notify(group, queue, ^{ UIGraphicsBeginImageContextWithOptions(image1.size ,NO, 0.0);
[image1 drawInRect:CGRectMake(, , image1.size.width, image1.size.height)];
[image2 drawInRect:CGRectMake(, , image1.size.width, image1.size.height/)];
fullImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); dispatch_async(dispatch_get_main_queue(), ^{
imgView.image = fullImage;
});
});
}

注意:上面的合成位置,都是我随便写的,实际场景下,大家可以自己按需求定义,或将位置传参也行,楼主是因为偷懒来着。。。

iOS 图片水印、图片合成文字或图片实现的更多相关文章

  1. javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...

  2. IOS 绘制基本图形(画文字、图片水印)

    - (void)drawRect:(CGRect)rect { // Drawing code // [self test]; // 1.加载图片到内存中 UIImage *image = [UIIm ...

  3. PHP实现水印效果(文字、图片)

    第一种 <?php /** * 功能:给一张图片加上水印效果 * $i 要加水印效果的图片 * $t 水印文字 * $size 文字大小 * $pos 水印的位置 * $color 文字的颜色 ...

  4. PHP加水印代码 支持文字和图片水印

    PHP加图片水印.文字水印类代码,PHP加水印类,支持文字图片水印的透明度设置.水印图片背景透明.自己写的一个类,因为自己开发的一套CMS中要用到,网上的总感觉用着不顺手,希望大家也喜欢这个类,后附有 ...

  5. C# 给图片添加透明的文字、图片水印

    #region 添加水印 /// <summary> /// 添加文字水印 /// </summary> /// <param name="image" ...

  6. 织梦/dedecms 当文章转载时不需要设置图片水印的设置,取消’图片是否加水印‘的复选框,并且修改如下文件即可生效

    当想添加水印是选中“图片是否加水印”复选框即可. 找到include/helpers/image.helper.php这个文件,在里面找到中的if( isset($GLOBALS['needwater ...

  7. 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

    javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...

  8. Java给图片和PDF文件添加水印(图片水印和文字水印)

    有时候我们看到的图片或者PDF文件会自动加上水印.分为文字水印和图片水印. ----------------------------图片水印---------------------------- 1 ...

  9. ASP.NET(C#)图片加文字、图片水印,神啊,看看吧

    ASP.NET(C#)图片加文字.图片水印 一.图片上加文字: //using System.Drawing; //using System.IO; //using System.Drawing.Im ...

随机推荐

  1. 计算机学院大学生程序设计竞赛(2015’12) 1005 Bitwise Equations

    #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using ...

  2. 省市二级联动--使用app-jquery-cityselect.js插件

    只有省市二级联动,三级联动还没处理好,会尽快完善. 嵌入id: <div class="form-group"> <label>地址</label&g ...

  3. C程序编译执行过程

    C程序编译执行过程   认识C编译执行过程,是C学习的开端. 简单说C语言从编码编译到执行要经历一下过程:   C源代码 编译---->形成目标代码,目标代码是在目标机器上运行的代码. 连接-- ...

  4. MAC使用GITHUB

    作者:珊姗是个小太阳链接:https://www.zhihu.com/question/20070065/answer/79557687来源:知乎著作权归作者所有,转载请联系作者获得授权. #什么是 ...

  5. 前端之Sass/Scss实战笔记

    简介 Sass 有两种语法规则(syntaxes),目前新的语法规则(从 Sass 3开始)被称为 “SCSS”( 时髦的css(Sassy CSS)),它是css3语法的的拓展级,就是说每一个语法正 ...

  6. C# MODBUS协议 上位机(转)

    源:C# MODBUS协议 上位机 C#写了一款上位机监控软件,基于MODBUS_RTU协议. 软件的基本结构: 采用定时器(Timer控件)为时间片. 串口采用serialPort1_DataRec ...

  7. 四、Hbase

    一.什么情况下使用Hbase 例子: 这里Order By无时不刻的处理,我们要看到刚才的足迹,不能使用缓存技巧. 根据时间戳来查询,显然很快,应为Hbase就是以时间戳来存的. 将最近的数据放在内存 ...

  8. NSURL 子串截取

    NSURL *url = [NSURL URLWithString:@"http://reg.email.163.com/unireg/call.do?cmd=register.entran ...

  9. 虚拟机联网及远程连接-Linux基础环境命令学习笔记

    1.ifconfig命令=ip a命令,查看IP地址 网卡默认名称eth0. Bcast 广播地址2.xshell or secureCRT远程连接 ssh root@地址 xmanager 远程桌面 ...

  10. IOS开发-UI学习-UITextField的具体属性及用法

    直接上代码,里面有各种属性的用法注释,至于每个属性有多个可以设置的值,每个值的效果如何,可以通过查看这个函数参数的枚举量,并逐一测试. //制作登陆界面 #import "ViewContr ...