IOS 绘制图片水印(封装)
- (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 绘制图片水印(封装)的更多相关文章
- IOS 拉伸图片(封装)
/** * 根据图片名返回一张能够自由拉伸的图片 */ +(UIImage *)resizedImage:(NSString *)name { UIImage *image=[UIImage imag ...
- IOS 绘制基本图形(画文字、图片水印)
- (void)drawRect:(CGRect)rect { // Drawing code // [self test]; // 1.加载图片到内存中 UIImage *image = [UIIm ...
- php使用GD库实现图片水印和缩略图——封装成类
学完了如何使用GD库来实现对图片的各种处理,那么我们可以发现,不管哪种方法,都有相似之处,如果我们把这些相似的地方和不相似的地方都封装成类,这样就可以提升代码的速度,而且节省了很多时间,废话不多说,来 ...
- IOS第17天(1,Quartz2D图片水印)
****图片 水印 #import "HMViewController.h" @interface HMViewController () @property (weak, non ...
- Swift - 给图片添加图片水印(图片上绘制另一张图,并可设透明度)
我前面写了篇文章讲解如何给图片添加文字水印,而如果想要添加图片类型的水印也很简单,只要把原来代码里添加文字的部分改成图片即可. 1,效果图如下: (在图片左上角添加了一个半透明的logo图片) 2,为 ...
- iOS UI进阶-1.1 Quartz2D 图片水印/裁剪/截图
图片水印 UIImage+MJ.h #import <UIKit/UIKit.h> @interface UIImage (MJ) /** * 打水印 * * @param bg 背景图片 ...
- iOS:quartz2D绘图(在PDF文件上绘制图片)
quartz2D还可以在PDF文件上绘制图片,它有自己的PDF Graphics Context上下文,通过UIGraphicsBeginPDFContextToFile方法开始上下文后就可以绘制图片 ...
- C#图片处理3种高级应用(高缩略图清晰度、图片剪裁、图片水印)
利用C#图片处理的一些基本和高级应用,解决了显示排版时想让相片缩略图列表非常统一.整齐.和美观,每张缩略图大小固定为120 x 90且不拉伸变形,用户头像让缩略图比原图更清晰,上传的图片下加一个半透明 ...
- ASP.NET(C#)图片加文字、图片水印,神啊,看看吧
ASP.NET(C#)图片加文字.图片水印 一.图片上加文字: //using System.Drawing; //using System.IO; //using System.Drawing.Im ...
随机推荐
- 【leetcode 968. 1028. 从先序遍历还原二叉树】解题报告[待完善...]
思路:用一个栈来管理树的层次关系,索引代表节点的深度 方法一: TreeNode* recoverFromPreorder(string S) { /* 由题意知,最上层节点深度为0(数字前面0条横线 ...
- [WIP]Vue CLI
更新: 2019/05/30 文档: https://cli.vuejs.org/zh/ 安装 npm install -g @vue/cli 确认是否成功安装 vue --version 基础 ...
- Trie[字典树] 数据结构及基本操作集
#include <iostream> #include <stdio.h> #include <cstring> #include <algorithm&g ...
- [Django笔记] models 深入学习
对着官方文档撸一遍,顺便做点笔记 models 定义了本应用的数据库表结构.底层可以由不同的数据库封装实现,因为不同的数据库字段类型不一样,因此,跟以往直接用单一数据库(如mysql)建立的应用有很大 ...
- Spark 性能调优零散知识
1. 如果 Spark 中 CPU 的使用率不够高,可以考虑为当前的程序分配更多的 Executor, 或者增加更多的 Worker 实例来充分的使用多核的潜能 2. 适当设置 Partition 分 ...
- bzoj 3123: [Sdoi2013]森林(45分暴力)
3123: [Sdoi2013]森林 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4184 Solved: 1235[Submit][Status ...
- 2017-10-26 NOIP模拟赛
三分咲 #include<iostream> #include<cstdio> #include<ctime> using namespace std; int n ...
- ubuntu 14.04安装octave,及其使用
从库安装: sudo apt-add-repository ppa:octave/stable sudo apt-get update sudo apt-get install octave 使用:以 ...
- EcmaScript源码
/** @type {Number} @const */ NaN = 0; /** @type {Number} */ Infinity = 0; undefined = 0; /** @param ...
- 主键约束 primary key
主键的作用: 可以唯一标识 一条数据,每张表里面只能有一个主键,.主键特性: 非空且唯一.当表里没有主键的时,第一个出现的非空且为唯一的列,被当成主键. 例子:create table tb3( ...