iOS 图片水印、图片合成文字或图片实现
这个需求可能有时候会碰到,比如自己的照片加版权,打水印等
网上的方法,有不少感觉不全对,或者需求不是特全,这里我总结了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 图片水印、图片合成文字或图片实现的更多相关文章
- javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印
欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...
- IOS 绘制基本图形(画文字、图片水印)
- (void)drawRect:(CGRect)rect { // Drawing code // [self test]; // 1.加载图片到内存中 UIImage *image = [UIIm ...
- PHP实现水印效果(文字、图片)
第一种 <?php /** * 功能:给一张图片加上水印效果 * $i 要加水印效果的图片 * $t 水印文字 * $size 文字大小 * $pos 水印的位置 * $color 文字的颜色 ...
- PHP加水印代码 支持文字和图片水印
PHP加图片水印.文字水印类代码,PHP加水印类,支持文字图片水印的透明度设置.水印图片背景透明.自己写的一个类,因为自己开发的一套CMS中要用到,网上的总感觉用着不顺手,希望大家也喜欢这个类,后附有 ...
- C# 给图片添加透明的文字、图片水印
#region 添加水印 /// <summary> /// 添加文字水印 /// </summary> /// <param name="image" ...
- 织梦/dedecms 当文章转载时不需要设置图片水印的设置,取消’图片是否加水印‘的复选框,并且修改如下文件即可生效
当想添加水印是选中“图片是否加水印”复选框即可. 找到include/helpers/image.helper.php这个文件,在里面找到中的if( isset($GLOBALS['needwater ...
- 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)
javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...
- Java给图片和PDF文件添加水印(图片水印和文字水印)
有时候我们看到的图片或者PDF文件会自动加上水印.分为文字水印和图片水印. ----------------------------图片水印---------------------------- 1 ...
- ASP.NET(C#)图片加文字、图片水印,神啊,看看吧
ASP.NET(C#)图片加文字.图片水印 一.图片上加文字: //using System.Drawing; //using System.IO; //using System.Drawing.Im ...
随机推荐
- 常用HQL集锦
1.根据ID查询某"一个"实体类 方法1: String hql = "From ClassEntity as c where c.id=?"; ClassEn ...
- 关于NOMINMAX这个预处理宏
标准库在<algorithm>头中定义了两个模板函数std::min() 和 std::max().通常用它可以计算某个值对的最小值和最大值.可惜在 Visual C++ 无法使用它们,因 ...
- 对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误
在Java中修饰符总共有一下几种: 1.访问控制修饰符 分别有:public private protected,缺省 2.其它修饰符 分别有:abstract,final,stati ...
- Linux 分区和目录解析
转自:http://www.cnblogs.com/apprentice89/archive/2012/12/17/2821332.html 计算机中存放信息的主要的存储设备就是硬 盘,但是硬盘不能直 ...
- CodeForces 652A Gabriel and Caterpillar
简单模拟. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...
- LoadLibrary失败的原因(转)
背影: 今天终于把公司的SDK 动态链接库转为Java 可调用的JNI 格式.DLL的编译环境是VS2010,使用Debug 输出时调用正常,而用Release 输出却调用失败.这可把哥搞惨了,开始以 ...
- svn无法提交
svn无法提交, 错误信息:Commit failed. svn: E200007: CHECKOUT can only be performed on a version resource... 解 ...
- 理解javascript:void(0);和href="#"
我们经常可以看见这样的代码: <a href="javascript:void(0);">链接</a> void的意思是空的,无效的意思,但是在js中是表示 ...
- UVa 10653 - Bombs! NO they are Mines!!
题目大意:给你一个二维迷宫,给定入口和出口,找出最短路径. 无权图上的单源最短路,用BFS解决. #include <cstdio> #include <queue> #inc ...
- C++ 句柄类
一.容器与继承 在容器中保存有继承关系的对象时,如果定义成保存基类对象,则派生类将被切割,如果定义成保存派生类对象,则保存基类对象又成问题(基类对象将被强制转换成派生类对象,而派生类中定义的成员未被初 ...