博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift - 给图片添加文字水印(图片上写文字,并可设置位置和样式)
阅读量:5226 次
发布时间:2019-06-14

本文共 2453 字,大约阅读时间需要 8 分钟。

想要给图片添加文字水印或者注释,我们需要实现在UIImage上写字的功能。

1,效果图如下:
(在图片左上角和右下角都添加了文字。)
2,为方便使用,我们通过扩展UIImage类来实现添加水印功能
(文字大小,文字颜色,背景色,位置,边距都可以设置)
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
42
43
44
45
46
47
48
//--- UIImageExtension.swift ---
import
UIKit
 
extension
UIImage
{
     
    
//水印位置枚举
    
enum
WaterMarkCorner
{
        
case
TopLeft
        
case
TopRight
        
case
BottomLeft
        
case
BottomRight
    
}
     
    
//添加水印方法
    
func
waterMarkedImage(waterMarkText:
String
, corner:
WaterMarkCorner
= .
BottomRight
,
        
margin:
CGPoint
=
CGPoint
(x: 20, y: 20), waterMarkTextColor:
UIColor
=
UIColor
.whiteColor(),
        
waterMarkTextFont:
UIFont
=
UIFont
.systemFontOfSize(20),
        
backgroundColor:
UIColor
=
UIColor
.clearColor()) ->
UIImage
{
         
        
let
textAttributes = [
NSForegroundColorAttributeName
:waterMarkTextColor,
            
NSFontAttributeName
:waterMarkTextFont]
        
let
textSize =
NSString
(string: waterMarkText).sizeWithAttributes(textAttributes)
        
var
textFrame =
CGRectMake
(0, 0, textSize.width, textSize.height)
         
        
let
imageSize =
self
.size
        
switch
corner{
        
case
.
TopLeft
:
            
textFrame.origin = margin
        
case
.
TopRight
:
            
textFrame.origin =
CGPoint
(x: imageSize.width - textSize.width - margin.x, y: margin.y)
        
case
.
BottomLeft
:
            
textFrame.origin =
CGPoint
(x: margin.x, y: imageSize.height - textSize.height - margin.y)
        
case
.
BottomRight
:
            
textFrame.origin =
CGPoint
(x: imageSize.width - textSize.width - margin.x,
                
y: imageSize.height - textSize.height - margin.y)
        
}
         
        
// 开始给图片添加文字水印
        
UIGraphicsBeginImageContext
(imageSize)
        
self
.drawInRect(
CGRectMake
(0, 0, imageSize.width, imageSize.height))
        
NSString
(string: waterMarkText).drawInRect(textFrame, withAttributes: textAttributes)
         
        
let
waterMarkedImage =
UIGraphicsGetImageFromCurrentImageContext
()
        
UIGraphicsEndImageContext
()
         
        
return
waterMarkedImage
    
}
}

3,使用样例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import
UIKit
 
class
ViewController
:
UIViewController
{
 
    
@IBOutlet
weak
var
imageView:
UIImageView
!
     
    
override
func
viewDidLoad() {
        
super
.viewDidLoad()
         
        
//使用链式调用方法,给图片添加两条水印
        
imageView.image =
UIImage
(named:
"bg"
)?
            
.waterMarkedImage(
"做最好的开发者知识平台"
)
            
.waterMarkedImage(
"hangge.com"
, corner: .
TopLeft
,
                
margin:
CGPoint
(x: 20, y: 20), waterMarkTextColor:
UIColor
.blackColor(),
                
waterMarkTextFont:
UIFont
.systemFontOfSize(45), backgroundColor:
UIColor
.clearColor())
    
}
 
    
override
func
didReceiveMemoryWarning() {
        
super
.didReceiveMemoryWarning()
    
}
}

转载于:https://www.cnblogs.com/Free-Thinker/p/4844069.html

你可能感兴趣的文章
细说WebSocket - Node篇
查看>>
Extjs控件之 grid打印功能
查看>>
Jquery操作cookie,实现简单的记住用户名的操作
查看>>
【原创】大数据基础之Zookeeper(4)应用场景
查看>>
静态变量数组实现LRU算法
查看>>
中文系统 上传file的input显示英文
查看>>
比callback更简洁的链式执行promise
查看>>
android permission
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>
Python 第四十五章 MySQL 内容回顾
查看>>
实验2-2
查看>>
String,StringBuffer与StringBuilder的区别?? .
查看>>
MongoDB遇到的疑似数据丢失的问题。不要用InsertMany!
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
实用的VMware虚拟机使用技巧十一例
查看>>
监控工具之---Prometheus 安装详解(三)
查看>>
不错的MVC文章
查看>>
IOS Google语音识别更新啦!!!
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>