Добавить текст на UIImage
Привет! Я использую эту функцию для рисования текста на изображении после того, как рисование на изображении сделано, но когда я делаю это, он показывает мне прозрачный текст, т.е. текст с непрозрачностью, который я не хочу, должен быть с альфа 1.0, я попытался добавить атрибут fontcolor с RGBA, но не работает
-(UIImage*) drawText:(NSString*) text
inImage:(UIImage*) image
atPoint:(CGPoint) point
atSize :(CGSize) size
{
//[NSLog(@"Drawing Text on the Image : Text Posn x:%f y:%f ",point.x,point.y);
UIGraphicsBeginImageContext(_mainViewForDrawing.frame.size);
[image drawInRect:CGRectMake(_mainViewForDrawing.frame
.origin.x,_mainViewForDrawing.frame.origin.y,_mainViewForDrawing.frame.size.width,_mainViewForDrawing.frame.size.height)];
CGPoint pt;
pt.x = point.x + _camera2EditText.frame.size.width/2;
pt.y = point.y + _camera2EditText.frame.size.height/2;
UITextPosition *post = [_camera2EditText beginningOfDocument];
CGRect r = [_camera2EditText caretRectForPosition:post];
//[NSLog(@"Here is the rect: %f %f ",r.origin.x,r.origin.y);
CGRect rect = CGRectMake(r.origin.x, point.y + r.origin.y, _mainViewForDrawing.frame.size.width,_mainViewForDrawing.frame.size.height);
[[UIColor whiteColor] set];
//UIFont *font = [UIFont boldSystemFontOfSize:TextFontSize];
UIFont *font = [UIFont fontWithName:TEXT_FONT_NAME size:TEXT_FONT_SIZE];
if([text respondsToSelector:@selector(drawInRect:withAttributes:)])
{
//iOS 7
// NSDictionary *att = @{NSFontAttributeName:font};
NSDictionary *att = @{ NSFontAttributeName: font, NSForegroundColorAttributeName: [UIColor whiteColor]};
[text drawInRect:rect withAttributes:att];
}
else
{
//legacy support
[text drawInRect:CGRectIntegral(rect) withFont:font];
}
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
Как это сделать?
2 ответа
Это мой метод, который я использую для рисования текста на изображении, надеюсь, это поможет. Вместо этого он использует приписанную строку, чтобы установить нужные свойства:
+(UIImage*)drawFront:(UIImage*)image text:(NSString*)text atPoint:(CGPoint)point
{
UIFont *font = [UIFont fontWithName:@"Halter" size:21];
UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];
CGRect rect = CGRectMake(point.x, (point.y - 5), image.size.width, image.size.height);
[[UIColor whiteColor] set];
NSMutableAttributedString* attString = [[NSMutableAttributedString alloc] initWithString:text];
NSRange range = NSMakeRange(0, [attString length]);
[attString addAttribute:NSFontAttributeName value:font range:range];
[attString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:range];
NSShadow* shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor darkGrayColor];
shadow.shadowOffset = CGSizeMake(1.0f, 1.5f);
[attString addAttribute:NSShadowAttributeName value:shadow range:range];
[attString drawInRect:CGRectIntegral(rect)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
Это должно быть достаточно легко для вас, чтобы приспособиться к вашим потребностям... Дайте мне знать, если вы боретесь!
Если вы хотите добавить текст на изображение и принять ввод от пользователя, то вы можете поместить это текстовое представление в UIView и создать изображение и объединить его с фоном.
// Нарисовать текстовое представление, чтобы создать из него изображение
UIGraphicsBeginImageContextWithOptions(viewInputText.bounds.size, true, 0)
viewInputText.drawViewHierarchyInRect(viewInputText.bounds, afterScreenUpdates: true)
let imageWithText = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
//create a UIImage from the current context and save it to camera roll.
UIGraphicsBeginImageContextWithOptions(imgCorrection.bounds.size, true, 0)
imgCorrection.image?.drawInRect(CGRect(x: 0, y: 0,
width: imgCorrection.frame.size.width, height: imgCorrection.frame.size.height))
//Draw the text image in the current context to make a single image.
imageWithText.drawInRect(viewInputText.frame)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
//save image on the camera roll.
Для более подробной информации, пожалуйста, перейдите по следующей ссылке