2012-09-21 49 views
0

下面的代碼繪製一些文本在圖像:如何使用drawAtPoint()覆蓋UIImage?

UIGraphicsBeginImageContext(image.size); 
[image drawAtPoint:CGPointZero]; 

NSString *stamp = @"Internal Use Only"; 
[stamp drawAtPoint:CGPointMake(10, 10) withFont:[UIFont systemFontOfSize:32]]; 

UIImage *stampedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

如果再次使用不同的字符串執行的代碼,兩個串被組合和不清晰。我怎樣才能讓drawAtPoint()覆蓋前面的字符串?

回答

0

我能夠通過渲染UITextView來完成這項工作。這些知道如何通過他們的圖層屬性繪製自己,並可以顯示多行(額外的獎勵!):

CGContextRef context = UIGraphicsGetCurrentContext(); 
NSString *stamp = @"Internal Use Only"; 
CGRect frame = CGRectMake(0, 0, 120, 80); 
textview.frame = frame; 
textview.text = stamp; 
textview.font = [UIFont systemFontOfSize:32]; 
[textview.layer renderInContext:context]; 
0

您每次需要在原始圖像上繪製文本時都需要複製原始圖像。換句話說,您必須保留圖像的原始版本。

+0

是的,但不幸的是,原始圖像將被其他人修改。我必須在圖像的相同區域放置一張郵票。這就是爲什麼我想以某種方式「擦除」舊的郵票並在其上放置一個新郵票。 – Hahnemann

+0

被他人?您不能僅從圖像中刪除圖章,唯一可行的方法是將圖像的原始部分保存在圖章下方。 Earse意味着 - 將圖像返回到某個先前的狀態,因此,您只需「記住」您要恢復的這種情況。你可以保存整個圖像或只是一些部分 - 這將取決於你的郵票指標... – Tutankhamen

+0

因此,我得到一個圖像,並使用今天的日期在(10,10)的右上角使用此代碼戳圖像。然後,我將這張加蓋的圖像發送給另一個繪製別的東西的過程(例如在中心畫一個紅圈)。明天我會看到包含紅圈和原始郵票的圖像。今天的日期我需要重印這張照片。但是如果我在圖像上再次運行此代碼,它將在原始日期之上渲染。那麼如何再次蓋印圖像,使其完全覆蓋原始(昨天)的日期? – Hahnemann