ios 給圖片上加水印的方法

分享類型:應(yīng)用開發(fā)相關(guān)

ios圖片加水印或文字

詳情可見附件,我親自測試了一下,發(fā)現(xiàn)原來的方法確實(shí)存在諸多問題,重新寫了一下盒犹,大家隨意取用,有問題再交流

1.加文字

- (UIImage *)imageWithLogoText:(UIImage *)img text:(NSString*)text1

{

/////注:此為后來更改眨业,用于顯示中文急膀。zyq,2013-5-8

CGSize size = CGSizeMake(200, img.size.height);//設(shè)置上下文(畫布)大小

UIGraphicsBeginImageContext(size);//創(chuàng)建一個基于位圖的上下文(context),并將其設(shè)置為當(dāng)前上下文

CGContextRef contextRef = UIGraphicsGetCurrentContext();//獲取當(dāng)前上下文

CGContextTranslateCTM(contextRef, 0, img.size.height);//畫布的高度

CGContextScaleCTM(contextRef, 1.0, -1.0);//畫布翻轉(zhuǎn)

CGContextDrawImage(contextRef, CGRectMake(0, 0, img.size.width, img.size.height), [img CGImage]);//在上下文種畫當(dāng)前圖片

[[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];//此處設(shè)置文字顯示的位置

UIImage *targetimg =UIGraphicsGetImageFromCurrentImageContext();//從當(dāng)前上下文種獲取圖片

UIGraphicsEndImageContext();//移除棧頂?shù)幕诋?dāng)前位圖的圖形上下文龄捡。

returntargetimg;

//注:此為原來,不能顯示中文聘殖。無用晨雳。

//get image width and height

intw = img.size.width;

inth = 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.新的添加文字水印的方法一

#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([selfsize],NO, 0.0);// 0.0 for scale means "scale for device's main screen".

}

#else

if([[[UIDevice currentDevice] systemVersion] floatValue] < 4.0)

{

UIGraphicsBeginImageContext([selfsize]);

}

#endif

//原圖

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

//文字顏色

[color set];

//水印文字

[markString drawInRect:rect withFont:font];

UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

returnnewPic;

}

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

#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([selfsize],NO, 0.0);// 0.0 for scale means "scale for device's main screen".

}

#else

if([[[UIDevice currentDevice] systemVersion] floatValue] < 4.0)

{

UIGraphicsBeginImageContext([selfsize]);

}

#endif

//原圖

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

//文字顏色

[color set];

//水印文字

[markString drawAtPoint:point withFont:font];

UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

returnnewPic;

}

4.加圖片

#pragma mark - 加圖片水印

-(UIImage *)imageWithLogoImage:(UIImage *)img logo:(UIImage *)logo

{

//get image width and height

intw = img.size.width;

inth = img.size.height;

intlogoWidth = logo.size.width;

intlogoHeight = 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.新的添加圖片水印的方法

#pragma mark -還是圖片水印

- (UIImage *) imageWithWaterMask:(UIImage*)mask inRect:(CGRect)rect

{

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0)

{

UIGraphicsBeginImageContextWithOptions([selfsize],NO, 0.0);// 0.0 for scale means "scale for device's main screen".

}

#else

if([[[UIDevice currentDevice] systemVersion] floatValue] < 4.0)

{

UIGraphicsBeginImageContext([selfsize]);

}

#endif

//原圖

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

//水印圖

[mask drawInRect:rect];

UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

returnnewPic;

}

6 .加半透明的水印

//加半透明的水印

-(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();

returnresultingImage;

}

下載的工具類:https://app.yinxiang.com/shard/s70/nl/2147483647/dda44123-65db-4b33-a69d-7c4b4dbf0575/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末行瑞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子餐禁,更是在濱河造成了極大的恐慌血久,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帮非,死亡現(xiàn)場離奇詭異氧吐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)喜鼓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衔肢,“玉大人庄岖,你說我怎么就攤上這事〗侵瑁” “怎么了隅忿?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長邦尊。 經(jīng)常有香客問我背桐,道長,這世上最難降的妖魔是什么蝉揍? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任链峭,我火速辦了婚禮,結(jié)果婚禮上又沾,老公的妹妹穿的比我還像新娘弊仪。我一直安慰自己,他們只是感情好杖刷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著役听,像睡著了一般典予。 火紅的嫁衣襯著肌膚如雪熙参。 梳的紋絲不亂的頭發(fā)上孽椰,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音栏渺,去河邊找鬼磕诊。 笑死霎终,一個胖子當(dāng)著我的面吹牛升薯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播广凸,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼谅海,長吁一口氣:“原來是場噩夢啊……” “哼扭吁!你這毒婦竟也來了智末?” 一聲冷哼從身側(cè)響起系馆,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤由蘑,失蹤者是張志新(化名)和其女友劉穎尼酿,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體思币,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年妈倔,在試婚紗的時候發(fā)現(xiàn)自己被綠了盯蝴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捧挺。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鸣峭,靈堂內(nèi)的尸體忽然破棺而出酥艳,到底是詐尸還是另有隱情充石,我是刑警寧澤骤铃,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布惰爬,位于F島的核電站撕瞧,受9級特大地震影響丛版,放射性物質(zhì)發(fā)生泄漏偏序。R本人自食惡果不足惜研儒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一州胳、第九天 我趴在偏房一處隱蔽的房頂上張望栓撞。 院中可真熱鬧,春花似錦瓢颅、人聲如沸挽懦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稠曼。三九已至,卻和暖如春漠吻,著一層夾襖步出監(jiān)牢的瞬間途乃,已是汗流浹背耍共。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹏往,地道東北人伊履。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓群凶,卻偏偏與公主長得像请梢,于是被迫代替她去往敵國和親毅弧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

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