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

网上的方法,有不少感觉不全对,或者需求不是特全,这里我总结了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. fixed定位与absolute定位

    相同点: 1.fixed定位和absolute定位都是绝对定位 2.fixed定位和absolute定位都脱离了标准文档流, 3.未设置偏移量时,都定位在父元素的左上角 tip:元素设置相对定位或绝对 ...

  2. Ubuntu iptables 设置

    在ubuntu中由于不存在 /etc/init.d/iptales文件,所以无法使用service等命令来启动iptables,需要用modprobe命令. 启动iptables modprobe i ...

  3. MemSQL 取代 HDFS 与 Spark 结合,性能大幅提升

    MemSQL 取代 HDFS 与 Spark 结合,性能大幅提升 3,597 次阅读 - 基础架构 Apache Spark是目前非常强大的分布式计算框架.其简单易懂的计算框架使得我们很容易理解.虽然 ...

  4. angularJS 系列(一)

    angularJS 中 $scope 的原型 和 原型继承之间的细微差别是什么? 参考:http://stackoverflow.com/questions/14049480/what-are-the ...

  5. Ubuntu安装PHP时候出错--xml2-config not found

    在Ubuntu下接着安装php时候,在configure后,又出现错误提示:error: xml2-config not found. Please check your libxml2 instal ...

  6. php学习-数组(一)

    数组函数可以对大量性质相同的数据进行存储,排序,插入及删除等操作. 学习任务: 声明数组,输出数组,遍历数组,查询数组中指定元素,获取数组中的最后一个元素. 删除数组中重复的元素.统计数组中元素的个数 ...

  7. TCP协议和UDP协议的区别

    1. TCP协议面向连接. UDP协议面向非连接 (有无链接)2. TCP协议传输速度慢. UDP协议传输速度快 (传输速度)3. TCP协议保证数据顺序. UDP协议不保证 (数据的有序性. 在IP ...

  8. win7 下安装 ubuntu 16.04双系统

    Ubuntu 每年发布两个版本,目前最新正式版版本也升到了 16.04.Ubuntu 16.04 开发代号为"Xenial Xerus",为第六个长期支持(LTS)版本,其主要特色 ...

  9. ECSHOP session

    ECSHOP session传值 <?phpclass cls_session{    var $session_table  = ''; ; // SESSION 过期时间 var $sess ...

  10. Oracle数据库常用技术

    一.视图(重点) 什么是视图? ·视图由一个或多个表(或视图)中提取数据而成 ·视图是一种虚拟表 ·视图一经创建,可以当作表来使用. 使用视图的好处? · 简化复杂数据查询 · 提高运行效率 · 屏蔽 ...