zoukankan      html  css  js  c++  java
  • 添加水印

    1.加文字

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    - (UIImage *)imageWithLogoText:(UIImage *)img text:(NSString *)text1
    {    
        /////注:此为后来更改,用于显示中文。zyq,2013-5-8
        CGSize size = CGSizeMake(200, img.size.height);          //设置上下文(画布)大小
        UIGraphicsBeginImageContext(size);                       //创建一个基于位图的上下文(context),并将其设置为当前上下文
        CGContextRef contextRef = UIGraphicsGetCurrentContext(); //获取当前上下文
        CGContextTranslateCTM(contextRef, 0, img.size.height);   //画布的高度
        CGContextScaleCTM(contextRef, 1.0, -1.0);                //画布翻转
        CGContextDrawImage(contextRef, CGRectMake(0, 0, img.size.width, img.size.height), [img CGImage]);  //在上下文种画当前图片
         
        [[UIColor redColor] set];                                //上下文种的文字属性
        CGContextTranslateCTM(contextRef, 0, img.size.height);
        CGContextScaleCTM(contextRef, 1.0, -1.0);
        UIFont *font = [UIFont boldSystemFontOfSize:16];
        [text1 drawInRect:CGRectMake(0, 0, 200, 80) withFont:font];       //此处设置文字显示的位置
        UIImage *targetimg =UIGraphicsGetImageFromCurrentImageContext();  //从当前上下文种获取图片
        UIGraphicsEndImageContext();                            //移除栈顶的基于当前位图的图形上下文。
        return targetimg;
         
         
        //注:此为原来,不能显示中文。无用。
        //get image width and height
        int w = img.size.width;
        int h = img.size.height;
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
        //create a graphic context with CGBitmapContextCreate
        CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
        CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);
        CGContextSetRGBFillColor(context, 0.0, 1.0, 1.0, 1);
        char* text = (char *)[text1 cStringUsingEncoding:NSUnicodeStringEncoding];
        CGContextSelectFont(context, "Georgia", 30, kCGEncodingMacRoman);
        CGContextSetTextDrawingMode(context, kCGTextFill);
        CGContextSetRGBFillColor(context, 255, 0, 0, 1);
        CGContextShowTextAtPoint(context, w/2-strlen(text)*5, h/2, text, strlen(text));
        //Create image ref from the context
        CGImageRef imageMasked = CGBitmapContextCreateImage(context);
        CGContextRelease(context);
        CGColorSpaceRelease(colorSpace);
        return [UIImage imageWithCGImage:imageMasked];
     
    }


    2.新的添加文字水印的方法一

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #pragma mark -也是文字水印
    - (UIImage *) imageWithStringWaterMark:(NSString *)markString inRect:(CGRect)rect color:(UIColor *)color font:(UIFont *)font
    {
    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0)
        {
            UIGraphicsBeginImageContextWithOptions([self size], NO, 0.0); // 0.0 for scale means "scale for device's main screen".
        }
    #else
        if ([[[UIDevice currentDevice] systemVersion] floatValue] < 4.0)
        {
            UIGraphicsBeginImageContext([self size]);
        }
    #endif
         
        //原图
        [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];
         
        //文字颜色
        [color set];
         
        //水印文字
        [markString drawInRect:rect withFont:font];
         
        UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
         
        return newPic;
    }


    3.还是添加文字水印方法二

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #pragma mark -还是文字水印
    - (UIImage *) imageWithStringWaterMark:(NSString *)markString atPoint:(CGPoint)point color:(UIColor *)color font:(UIFont *)font
    {
    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0)
        {
            UIGraphicsBeginImageContextWithOptions([self size], NO, 0.0); // 0.0 for scale means "scale for device's main screen".
        }
    #else
        if ([[[UIDevice currentDevice] systemVersion] floatValue] < 4.0)
        {
            UIGraphicsBeginImageContext([self size]);
        }
    #endif
         
        //原图
        [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];
         
        //文字颜色
        [color set];
         
        //水印文字
        [markString drawAtPoint:point withFont:font];
         
        UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
         
        return newPic;
    }



    4.加图片

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #pragma mark - 加图片水印
    -(UIImage *)imageWithLogoImage:(UIImage *)img logo:(UIImage *)logo
    {
        //get image width and height
        int w = img.size.width;
        int h = img.size.height;
        int logoWidth = logo.size.width;
        int logoHeight = logo.size.height;
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
        //create a graphic context with CGBitmapContextCreate
        CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
        CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);
        CGContextDrawImage(context, CGRectMake(w-logoWidth, 0, logoWidth, logoHeight), [logo CGImage]);
        CGImageRef imageMasked = CGBitmapContextCreateImage(context);
        CGContextRelease(context);
        CGColorSpaceRelease(colorSpace);
        return [UIImage imageWithCGImage:imageMasked];
        //  CGContextDrawImage(contextRef, CGRectMake(100, 50, 200, 80), [smallImg CGImage]);
    }



    5.新的添加图片水印的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #pragma mark -还是图片水印
    - (UIImage *) imageWithWaterMask:(UIImage*)mask inRect:(CGRect)rect
    {
    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0)
        {
            UIGraphicsBeginImageContextWithOptions([self size], NO, 0.0); // 0.0 for scale means "scale for device's main screen".
        }
    #else
        if ([[[UIDevice currentDevice] systemVersion] floatValue] < 4.0)
        {
            UIGraphicsBeginImageContext([self size]);
        }
    #endif
         
        //原图
        [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];
        //水印图
        [mask drawInRect:rect];
         
        UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
         
        return newPic;
    }


    6 .加半透明的水印

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //加半透明的水印
    -(UIImage *)imageWithTransImage:(UIImage *)useImage addtransparentImage:(UIImage *)transparentimg
    {
        UIGraphicsBeginImageContext(useImage.size);
        [useImage drawInRect:CGRectMake(0, 0, useImage.size.width, useImage.size.height)];
        [transparentimg drawInRect:CGRectMake(0, useImage.size.height-transparentimg.size.height, transparentimg.size.width, transparentimg.size.height) blendMode:kCGBlendModeOverlay alpha:0.4f];
         
        UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return resultingImage;
    }
  • 相关阅读:
    2015-01-27-从实验出发理解buffer与cache区别-吴伟顺
    【实习记】2014-09-26恢复linux下误删的ntfs盘中的文件
    【实习记】2014-09-24万事达卡bin查询项目总结
    【实习记】2014-09-04浏览代码查middle资料+总结我折腾过的源码浏览器
    【实习记】2014-09-01从复杂到简单:一行命令区间查重+长整型在awk中的bug
    【实习记】2014-08-29算法学习Boyer-Moore和最长公共子串(LCS)
    【实习记】2014-08-28知值求范围问题
    【实习记】2014-08-27堆排序理解总结+使用typedef指代函数指针
    【实习记】2014-08-26都是回车惹的祸——shell脚本必须是unix行尾
    【实习记】2014-08-24实习生无法映射磁盘替代方案rsync+非默认端口22设置
  • 原文地址:https://www.cnblogs.com/piaojin/p/5853361.html
Copyright © 2011-2022 走看看