我只是试图在UIImage中叠加文本(使用CGContext),但它没有显示我指定的文本。在这段代码中,我将作为文本参数"Hello"
给出,但它显示“eÉääc”。我不知道发生了什么我认为角色已经被取代但我不知道如何解决它。
这是我的代码:
UIGraphicsBeginImageContextWithOptions(image.size, YES, 0);
CGContextRef c = UIGraphicsGetCurrentContext();
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
CGContextSetTextMatrix(c, CGAffineTransformMake(1.0, 0, 0, -1.0, 0, 0));
CGContextSelectFont(c, "ArialMT", 50, kCGEncodingFontSpecific);
CGContextSetRGBStrokeColor(c, 255, 0, 0, 1);
CGContextSetRGBFillColor(c, 255, 0, 0, 1);
CGContextSetCharacterSpacing(c, 2);
CGContextShowTextAtPoint(c,100,100, "Hello", 5);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
我正在使用西班牙语键盘(我不知道这是否重要)和iPad(我正在测试应用程序)是加泰罗尼亚语。
答案 0 :(得分:0)
CGContextShowTextAtPoint()
根据指定的CGContextSelectFont
编码参数解释给定的文本。您选择了kCGEncodingFontSpecific
,这是字体内置编码(无论可能是什么)。
唯一的另一个选择是kCGEncodingMacRoman
:
CGContextSelectFont(c, "ArialMT", 50, kCGEncodingMacRoman);
然后,只要您只使用ASCII字符集中的字符,您的文本就会正确显示。
对于非ASCII字符,您必须将字符串转换为MacRoman编码,请参阅例如https://stackoverflow.com/a/13743834/1187415举个例子。
请注意CGContextShowTextAtPoint
无法显示常规Unicode字符串,甚至还有欧元(€)字符问题。 drawAtPoint:withFont:
的{{1}}方法没有这些限制。