用UIGraphics進行2D圖像渲染 不要用UIGraphicsBeginImageContext(size); 不然圖片會模糊
Core Graphics API所有的操作都在一個上下文中進行。所以在繪圖之前需要獲取該上下文并傳入執行渲染的函數中。如果你正在渲染一副在內存中的圖片,此時就需要傳入圖片所屬的上下文。獲得一個圖形上下文是我們完成繪圖任務的第一步,你可以將圖形上下文理解為一塊畫布。如果你沒有得到這塊畫布,那么你就無法完成任何繪圖操作。當然,有許多方式獲得一個圖形上下文,這里我介紹兩種最為常用的獲取方法。
調用UIGraphicsBeginImageContextWithOptions函數就可獲得用來處理圖片的圖形上下文。利用該上下文,你就可以在其上進行繪圖,并生成圖片。調用UIGraphicsGetImageFromCurrentImageContext函數可從當前上下文中獲取一個UIImage對象。記住在你所有的繪圖操作后別忘了調用UIGraphicsEndImageContext函數關閉圖形上下文。
上代碼:
- ( UIImage *)createShareImage:( NSString *)str name:( NSString *)name number:( NSString *)number grade:( NSString *)grade
{
UIImage *image = [ UIImage imageNamed : @"shareGrade" ];
CGSize size= CGSizeMake (image. size . width , image. size . height ); // 畫布大小
UIGraphicsBeginImageContextWithOptions (size, NO , 0.0 );
[image drawAtPoint : CGPointMake ( 0 , 0 )];
// 獲得一個位圖圖形上下文
CGContextRef context= UIGraphicsGetCurrentContext ();
CGContextDrawPath (context, kCGPathStroke );
// 畫 打敗了多少用戶
[str drawAtPoint : CGPointMake ( 30 , image. size . height * 0.65 ) withAttributes : @{ NSFontAttributeName :[ UIFont fontWithName : @"Arial-BoldMT" size : 30 ], NSForegroundColorAttributeName :[ UIColor whiteColor ] } ];
//畫自己想畫的內容。。。。。
// 返回繪制的新圖形
UIImage *newImage= UIGraphicsGetImageFromCurrentImageContext ();
UIGraphicsEndImageContext ();
return newImage;
}