- (void)viewDidLoad
{
[super viewDidLoad];
// -1.加载图片
// UIImage *image = [UIImage imageNamed:@"me"]; // 0.创建一个bitmap的上文
// CGBitmapContextCreate
/*
size :指定将来创建出来的bitmap的大小
opaque : YES:不透明 NO:透明
scale: 缩放比例
创建出来的bitmap就对应一个UIImage
*/
UIGraphicsBeginImageContextWithOptions(CGSizeMake(, ) , NO , ); // 1.获取bitmap上下文
CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.绘图
CGContextAddEllipseInRect(ctx, CGRectMake(, , , )); // 3.渲染
CGContextStrokePath(ctx); // 4.获取生成的图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); // 5.显示生成的图片到imageview
self.iv.image = image; // 6.保存绘制好的图片到文件中
// 先将图片转换为二进制数据, 然后再将图片写到文件中
// UIImageJPEGRepresentation(image, 1)
NSData *data = UIImagePNGRepresentation(image); [data writeToFile:@"/Users/apple/Desktop/abc.png" atomically:YES];
}

封装:绘制图片水印

UIImage (NJ).h /.m

@interface UIImage (NJ)

/**
* 生成水印
*
* @param bgName 背景图片
* @param logNmae 水印图片
*
* @return 生成好的图片(带水印的图片)
*/
+ (instancetype)imageWithBackgroundImageName:(NSString *)bgName log:(NSString *)logNmae; @end
@implementation UIImage (NJ)

+ (instancetype)imageWithBackgroundImageName:(NSString *)bgName log:(NSString *)logNmae
{
// 0. 加载背景图片
UIImage *image = [UIImage imageNamed:bgName]; // 1.创建bitmap上下文
// 执行完这一行在内存中就相遇创建了一个UIImage
UIGraphicsBeginImageContextWithOptions(image.size, NO, ); // 2.绘图图片
// 绘制背景图片
[image drawAtPoint:CGPointMake(, )]; // 绘制水印' UIImage *logImage = [UIImage imageNamed:logNmae]; CGFloat margin = ;
CGFloat logY = margin;
CGFloat logX = image.size.width - margin - logImage.size.width;
[logImage drawAtPoint:CGPointMake(logX, logY)]; // NSString *str = @"黑马程序员";
// [str drawAtPoint:CGPointMake(150, 50) withAttributes:nil]; // 3.获得图片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); return newImage;
}

调用

- (void)viewDidLoad
{
[super viewDidLoad]; // 1.调用分类方法生成水印图片
UIImage *newImage = [UIImage imageWithBackgroundImageName:@"psb" log:@"logo1"]; // 2.将图片写到文件中
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"aaa.png"];
NSLog(@"%@", path); NSData *data = UIImagePNGRepresentation(newImage);
[data writeToFile:path atomically:YES]; [self test]; }

IOS 绘制图片水印(封装)的更多相关文章

  1. IOS 拉伸图片(封装)

    /** * 根据图片名返回一张能够自由拉伸的图片 */ +(UIImage *)resizedImage:(NSString *)name { UIImage *image=[UIImage imag ...

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

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

  3. php使用GD库实现图片水印和缩略图——封装成类

    学完了如何使用GD库来实现对图片的各种处理,那么我们可以发现,不管哪种方法,都有相似之处,如果我们把这些相似的地方和不相似的地方都封装成类,这样就可以提升代码的速度,而且节省了很多时间,废话不多说,来 ...

  4. IOS第17天(1,Quartz2D图片水印)

    ****图片 水印 #import "HMViewController.h" @interface HMViewController () @property (weak, non ...

  5. Swift - 给图片添加图片水印(图片上绘制另一张图,并可设透明度)

    我前面写了篇文章讲解如何给图片添加文字水印,而如果想要添加图片类型的水印也很简单,只要把原来代码里添加文字的部分改成图片即可. 1,效果图如下: (在图片左上角添加了一个半透明的logo图片) 2,为 ...

  6. iOS UI进阶-1.1 Quartz2D 图片水印/裁剪/截图

    图片水印 UIImage+MJ.h #import <UIKit/UIKit.h> @interface UIImage (MJ) /** * 打水印 * * @param bg 背景图片 ...

  7. iOS:quartz2D绘图(在PDF文件上绘制图片)

    quartz2D还可以在PDF文件上绘制图片,它有自己的PDF Graphics Context上下文,通过UIGraphicsBeginPDFContextToFile方法开始上下文后就可以绘制图片 ...

  8. C#图片处理3种高级应用(高缩略图清晰度、图片剪裁、图片水印)

    利用C#图片处理的一些基本和高级应用,解决了显示排版时想让相片缩略图列表非常统一.整齐.和美观,每张缩略图大小固定为120 x 90且不拉伸变形,用户头像让缩略图比原图更清晰,上传的图片下加一个半透明 ...

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

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

随机推荐

  1. 【leetcode 968. 1028. 从先序遍历还原二叉树】解题报告[待完善...]

    思路:用一个栈来管理树的层次关系,索引代表节点的深度 方法一: TreeNode* recoverFromPreorder(string S) { /* 由题意知,最上层节点深度为0(数字前面0条横线 ...

  2. [WIP]Vue CLI

    更新: 2019/05/30 文档: https://cli.vuejs.org/zh/  安装 npm install -g @vue/cli 确认是否成功安装 vue --version 基础   ...

  3. Trie[字典树] 数据结构及基本操作集

    #include <iostream> #include <stdio.h> #include <cstring> #include <algorithm&g ...

  4. [Django笔记] models 深入学习

    对着官方文档撸一遍,顺便做点笔记 models 定义了本应用的数据库表结构.底层可以由不同的数据库封装实现,因为不同的数据库字段类型不一样,因此,跟以往直接用单一数据库(如mysql)建立的应用有很大 ...

  5. Spark 性能调优零散知识

    1. 如果 Spark 中 CPU 的使用率不够高,可以考虑为当前的程序分配更多的 Executor, 或者增加更多的 Worker 实例来充分的使用多核的潜能 2. 适当设置 Partition 分 ...

  6. bzoj 3123: [Sdoi2013]森林(45分暴力)

    3123: [Sdoi2013]森林 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 4184  Solved: 1235[Submit][Status ...

  7. 2017-10-26 NOIP模拟赛

    三分咲 #include<iostream> #include<cstdio> #include<ctime> using namespace std; int n ...

  8. ubuntu 14.04安装octave,及其使用

    从库安装: sudo apt-add-repository ppa:octave/stable sudo apt-get update sudo apt-get install octave 使用:以 ...

  9. EcmaScript源码

    /** @type {Number} @const */ NaN = 0; /** @type {Number} */ Infinity = 0; undefined = 0; /** @param ...

  10. 主键约束 primary key

    主键的作用: 可以唯一标识 一条数据,每张表里面只能有一个主键,.主键特性: 非空且唯一.当表里没有主键的时,第一个出现的非空且为唯一的列,被当成主键. 例子:create table tb3(    ...