iOS 本地/網(wǎng)絡(luò)圖片打水印(圖片和文字)

抱歉, 上一版本出現(xiàn)點錯誤:

忽略了模板圖片的原來尺寸, 我的模板圖片的尺寸是1170*2296, 忘記處理了, 導(dǎo)致下面的內(nèi)容出現(xiàn)了偏差, 在這版中已解決.


圖片打水印的需求越來越多, 下面我們就來探討一下.

我是用的技術(shù)是Quartz2D.

1.創(chuàng)建一個UIImage的類別

1.1 在.h文件中定義一個方法, 方便外界調(diào)用

/**

?為本地圖片添加水印

?@param markImage添加的水印圖片

?@param markImageRect添加的水印圖片的區(qū)域

?@param markName添加的水印文字

?@param markNameRect添加的水印文字的區(qū)域

?@return繪制好的水印圖片

?*/

- (instancetype)waterMarkImage:(UIImage *)markImage markImageRect:(CGRect)markImageRect markName:(NSString *)markName markNameRect:(CGRect)markNameRect;

// ============== 添加的內(nèi)容?==============?

/**

?為網(wǎng)絡(luò)圖片添加水印

?@param markNetworkImageName添加的網(wǎng)絡(luò)水印圖片網(wǎng)址

?@param markImageRect加的網(wǎng)絡(luò)水印圖片的區(qū)域

?@param markName添加的水印文字

?@param markNameRect添加的水印文字的區(qū)域

?@return繪制好的水印圖片

?*/

- (instancetype)waterMarkNetworkImageName:(NSString *)markNetworkImageName markImageRect:(CGRect)markImageRect markName:(NSString *)markName markNameRect:(CGRect)markNameRect;

// ============== 添加的內(nèi)容?=============

1.2 在.m文件中實現(xiàn)此方法

//本地水印圖片

- (instancetype)waterMarkImage:(UIImage *)markImage markImageRect:(CGRect)markImageRect markName:(NSString *)markName markNameRect:(CGRect)markNameRect{

// ============== 修改過的內(nèi)容?==============?

//錯誤寫法? ? CGSize size = self.size;

//正確寫法

CGSize size = [UIScreen mainScreen].bounds.size;

// ============== 修改過的內(nèi)容?==============?

? ? //開啟圖片上下文

? ? UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);

? ? //繪制目標圖片

? ? [self drawInRect:CGRectMake(0, 0, size.width, size.height)];

? ? //繪制水印圖片

? ? [markImagedrawInRect:markImageRect];

? ? NSDictionary *attr = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:17],? //設(shè)置字體

? ? ? ? ? ? ? ? NSForegroundColorAttributeName : [UIColor redColor]? //設(shè)置字體顏色

?? ? ? ? ? ? ? ? ? ? ? ? ? };

? ? //繪制水印文字

? ? [markNamedrawInRect:markNameRect withAttributes:attr];

? ? //獲取繪制后的圖片

? ? UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

? ? //關(guān)閉圖片上下文

? ? UIGraphicsEndPDFContext();

? ? return image;

}

//網(wǎng)絡(luò)水印圖片

?- (instancetype)waterMarkNetworkImageName:(NSString *)markNetworkImageName markImageRect:(CGRect)markImageRect markName:(NSString *)markName markNameRect:(CGRect)markNameRect {

? //網(wǎng)絡(luò)的水印圖片

?NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:markNetworkImageName]];?UIImage *markImage = [UIImage sd_imageWithData:data];

?return [self waterMarkImage:markImage markImageRect:markImageRect markName:markName markNameRect:markNameRect];

?}

2.創(chuàng)建一個UIImageView的類別

2.1 在.h文件中定義一個方法, 方便外界調(diào)用

/**

?獲取水印圖片

?@param targetImage圖片模板

?@param markImageName添加的水印圖片(網(wǎng)絡(luò)獲取)

?@param markImageRect添加的水印圖片的區(qū)域

?@param markName添加的水印文字

?@param markNameRect添加的水印文字的區(qū)域

?*/

- (void)setWaterMarkTargettImage:(UIImage *)targetImage markImageName:(NSString *)markImageName markImageRect:(CGRect)markImageRect markName:(NSString *)markName markNameRect:(CGRect)markNameRect;

2.2 在.m文件中實現(xiàn)此方法

- (void)setWaterMarkTargettImage:(UIImage *)targetImage markImageName:(NSString *)markImageName markImageRect:(CGRect)markImageRect markName:(NSString *)markName markNameRect:(CGRect)markNameRect {

? ? //默認的水印圖片

? ? UIImage *placeholderImage = [UIImage imageNamed:@"easyicon"];

? ? [self sd_setImageWithURL:[NSURL URLWithString:markImageName] placeholderImage:targetImage completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {

? ? ? ? UIImage *waterImage = image ? image : placeholderImage;

?? ? ? ? self.image = [targetImage waterMarkImage:waterImage markImageRect:markImageRect markName:markName markNameRect:markNameRect];

? ? }];

}

3.在控制器里調(diào)用UIImage/UIImageView定義的方法

//網(wǎng)絡(luò)圖片地址

? ? NSString *url = @"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1514900854889&di=6172e4aef493d8b2e74589da2d0b1251&imgtype=0&src=http%3A%2F%2Fpic13.nipic.com%2F20110419%2F6782757_171000681191_2.jpg";

? ? // =======================? 繪制本地水印圖片? =======================

? ? //圖片模板

? ? UIImage *image = [UIImage imageNamed:@"liutao"];

? ? //添加的水印圖片

? ? UIImage *waterImage = [UIImage imageNamed:@"easyicon"];

? ? //添加的水印圖片的rect

// ============== 修改過的內(nèi)容?==============?

? ? CGFloat waterImageH = kWaterImageH * waterImage.size.height / waterImage.size.width;

? ? CGRect waterImageRect = CGRectMake(kScrrentW - kWaterImageH, 0, kWaterImageH, waterImageH);

? ? //添加的網(wǎng)絡(luò)水印圖片的rect

? ? CGRect waterNetworkImageRect = waterImageRect;

// ============== 修改過的內(nèi)容?==============?

? ? //添加的水印文字的rect

? ? CGRect waterNameRect = CGRectMake((kScrrentW - 100) / 2.0, 10, 200, 30);


? ? //加載繪制本地水印后的圖片

? ? //self.imageView.image = [image waterMarkImage:waterImage markImageRect:waterImageRect markName:@"劉濤女神" markNameRect:waterNameRect];


? ? //加載繪制網(wǎng)絡(luò)水印后的圖片

? ? self.imageView.image = [image waterMarkNetworkImageName:url markImageRect:waterNetworkImageRect markName:@"劉濤女神" markNameRect:waterNameRect];



? ? // =======================? 繪制網(wǎng)絡(luò)水印圖片? =======================

? ? //[self.imageView setWaterMarkTargettImage:image markImageName:url markImageRect:waterImageRect markName:@"劉濤女神" markNameRect:waterNameRect];


結(jié)果

如有錯誤請指出, 共同改正

Demo地址:?本地圖片/網(wǎng)絡(luò)圖片打水印(文字和圖片)Demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末媒峡,一起剝皮案震驚了整個濱河市映穗,隨后出現(xiàn)的幾起案子墅拭,更是在濱河造成了極大的恐慌语卤,老刑警劉巖歹苦,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陨溅,死亡現(xiàn)場離奇詭異庶灿,居然都是意外死亡染苛,警方通過查閱死者的電腦和手機拓哟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來河泳,“玉大人沃呢,你說我怎么就攤上這事〔鸹樱” “怎么了薄霜?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵某抓,是天一觀的道長。 經(jīng)常有香客問我惰瓜,道長否副,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任崎坊,我火速辦了婚禮备禀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奈揍。我一直安慰自己曲尸,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布男翰。 她就那樣靜靜地躺著另患,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奏篙。 梳的紋絲不亂的頭發(fā)上柴淘,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音秘通,去河邊找鬼为严。 笑死,一個胖子當著我的面吹牛肺稀,可吹牛的內(nèi)容都是我干的第股。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼话原,長吁一口氣:“原來是場噩夢啊……” “哼夕吻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起繁仁,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涉馅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后黄虱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稚矿,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年捻浦,在試婚紗的時候發(fā)現(xiàn)自己被綠了晤揣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡朱灿,死狀恐怖昧识,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盗扒,我是刑警寧澤跪楞,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布缀去,位于F島的核電站,受9級特大地震影響甸祭,放射性物質(zhì)發(fā)生泄漏朵耕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一淋叶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伪阶,春花似錦煞檩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至檐薯,卻和暖如春凝赛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坛缕。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工墓猎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赚楚。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓毙沾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宠页。 傳聞我的和親對象是個殘疾皇子左胞,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容