我环顾四周,但未能弄清楚如何获取文本,将其覆盖在图像上,然后将两者合并为一个UIImage。
UIImage
我已经用我能想到的搜索字词用尽了Google,因此,如果有人有解决方案或至少有一个提示,他们可以指出它,将不胜感激。
好吧…我知道了:
func textToImage(drawText: NSString, inImage: UIImage, atPoint: CGPoint) -> UIImage{ // Setup the font specific variables var textColor = UIColor.whiteColor() var textFont = UIFont(name: "Helvetica Bold", size: 12)! // Setup the image context using the passed image let scale = UIScreen.mainScreen().scale UIGraphicsBeginImageContextWithOptions(inImage.size, false, scale) // Setup the font attributes that will be later used to dictate how the text should be drawn let textFontAttributes = [ NSFontAttributeName: textFont, NSForegroundColorAttributeName: textColor, ] // Put the image into a rectangle as large as the original image inImage.drawInRect(CGRectMake(0, 0, inImage.size.width, inImage.size.height)) // Create a point within the space that is as bit as the image var rect = CGRectMake(atPoint.x, atPoint.y, inImage.size.width, inImage.size.height) // Draw the text into an image drawText.drawInRect(rect, withAttributes: textFontAttributes) // Create a new image out of the images we have created var newImage = UIGraphicsGetImageFromCurrentImageContext() // End the context now that we have the image we need UIGraphicsEndImageContext() //Pass the image back up to the caller return newImage }
要调用它,您只需传递一个图像:
textToImage("000", inImage: UIImage(named:"thisImage.png")!, atPoint: CGPointMake(20, 20))
最初的目标是创建一个动态图像,我可以在其中使用该图像,AnnotaionView例如在地图上的给定位置标价,这很适合。希望这对尝试做同样事情的人有所帮助。
AnnotaionView
func textToImage(drawText text: NSString, inImage image: UIImage, atPoint point: CGPoint) -> UIImage { let textColor = UIColor.white let textFont = UIFont(name: "Helvetica Bold", size: 12)! let scale = UIScreen.main.scale UIGraphicsBeginImageContextWithOptions(image.size, false, scale) let textFontAttributes = [ NSFontAttributeName: textFont, NSForegroundColorAttributeName: textColor, ] as [String : Any] image.draw(in: CGRect(origin: CGPoint.zero, size: image.size)) let rect = CGRect(origin: point, size: image.size) text.draw(in: rect, withAttributes: textFontAttributes) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return newImage! }
func textToImage(drawText text: String, inImage image: UIImage, atPoint point: CGPoint) -> UIImage { let textColor = UIColor.white let textFont = UIFont(name: "Helvetica Bold", size: 12)! let scale = UIScreen.main.scale UIGraphicsBeginImageContextWithOptions(image.size, false, scale) let textFontAttributes = [ NSAttributedStringKey.font: textFont, NSAttributedStringKey.foregroundColor: textColor, ] as [NSAttributedStringKey : Any] image.draw(in: CGRect(origin: CGPoint.zero, size: image.size)) let rect = CGRect(origin: point, size: image.size) text.draw(in: rect, withAttributes: textFontAttributes) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return newImage! }
func textToImage(drawText text: String, inImage image: UIImage, atPoint point: CGPoint) -> UIImage { let textColor = UIColor.white let textFont = UIFont(name: "Helvetica Bold", size: 12)! let scale = UIScreen.main.scale UIGraphicsBeginImageContextWithOptions(image.size, false, scale) let textFontAttributes = [ NSAttributedString.Key.font: textFont, NSAttributedString.Key.foregroundColor: textColor, ] as [NSAttributedString.Key : Any] image.draw(in: CGRect(origin: CGPoint.zero, size: image.size)) let rect = CGRect(origin: point, size: image.size) text.draw(in: rect, withAttributes: textFontAttributes) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return newImage! }