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(0, 0, w, h)];
    NSDictionary *attr = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:55], NSForegroundColorAttributeName : [UIColor redColor]  };
    //位置显示
    [mark drawInRect:CGRectMake(10, 20, 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(0, 0, useImage.size.width, useImage.size.height)];

    //四个参数为水印图片的位置
    [maskImage drawInRect:CGRectMake(0, 0, useImage.size.width, useImage.size.height/2)];
    //如果要多个位置显示,继续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, 0);

    // 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(0, 0, image1.size.width, image1.size.height)];
        [image2 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height/2)];
        fullImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        dispatch_async(dispatch_get_main_queue(), ^{
            imgView.image = fullImage;
        });
    });
}

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

时间: 2024-10-11 17:21:39

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

缩略图、图片水印图、文字水印图

原文:缩略图.图片水印图.文字水印图 源代码下载地址:http://www.zuidaima.com/share/1550463651056640.htm 文字水印效果:原图 加文字水印后: 加图片水印后:

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

第一种 <?php /**  * 功能:给一张图片加上水印效果  *      $i 要加水印效果的图片  *      $t 水印文字  *      $size 文字大小  *      $pos 水印的位置  *      $color 文字的颜色  *      $flag 是布尔值,主要用来区分是不是原图上加水印  *      $type 如果$flag等于false 则新图上加上水印 新文件名为 原名_txt.jpg  */ function txt($i,$t='版权所有',$s

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

PHP加图片水印.文字水印类代码,PHP加水印类,支持文字图片水印的透明度设置.水印图片背景透明.自己写的一个类,因为自己开发的一套CMS中要用到,网上的总感觉用着不顺手,希望大家也喜欢这个类,后附有类使用方法. <?php class WaterMask{ public $waterType = 1; //水印类型:0为文字水印.1为图片水印 public $pos = 0; //水印位置 public $transparent = 45; //水印透明度 public $waterStr =

ios 视频编辑,添加文字、图片(CA动画)水印,合成视频

参考link: 1,http://stackoverflow.com/questions/15932041/how-can-i-add-a-watermark-in-a-captured-video-on-ios(添加水印) 2,https://abdulazeem.wordpress.com/2012/04/02/video-manipulation-in-ios-resizingmerging-and-overlapping-videos-in-ios(合成视频) 3,http://www.

iOS上传语音、文字、图片

需求:用户可能提交 文字,也可能有语音,还有可能有图片.当然 都有也是可以的. 在这里我的方案是 先做判断(因为我提交的类不同(也就是方法不一样)): (1)if (_imageArray.count == 0 && recordingInterval == 0){ //只有文字 }else{ // 文字 图片 加录音 } 方法: // 有文字,有图,片有语音 +(void)askTextImageByUserInfoId:(NSString *)userInfoId WithUserRe

iOS设置button上的文字和图片上下垂直/水平居中对齐

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];//button的类型  button.frame = CGRectMake(100, 100,90, 90);//button的frame  button.backgroundColor = [UIColor cyanColor];//button的背

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

当想添加水印是选中“图片是否加水印”复选框即可. 找到include/helpers/image.helper.php这个文件,在里面找到中的if( isset($GLOBALS['needwatermark']) )在下面添加如下代码:else{   $photo_markup=$photo_markdown='0';}

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

ASP.NET(C#)图片加文字.图片水印 一.图片上加文字: //using System.Drawing; //using System.IO; //using System.Drawing.Imaging; private void AddTextToImg(string fileName,string text) { if(!File.Exists(MapPath(fileName))) { throw new FileNotFoundException("The file don't

php图片水印添加,压缩,剪切类的封装

php对图片文件的操作主要是利用GD库扩展.当我们频繁利用php对图片进行操作时,会自然封装很多函数,否则会写太多重复的代码.当有很多对图片的相关函数的时候,我们可以考虑将这些函数也整理一下,因而就有了封装成类的想法. 操作图片主要历经四个步骤: 打开图片 操作图片 输出图片 销毁图片 1,3,4三个步骤每次都要写,每次又都差不多.真正需要变通的只有操作图片的这一步骤了.操作图片又往往通过1或多个主要的GD函数来完成. 本文封装类里面的四种方法,文字水印(imagettftext()),图片水印