// // Created by Jesse Squires // http://www.jessesquires.com // // // Documentation // http://cocoadocs.org/docsets/JSQMessagesViewController // // // GitHub // https://github.com/jessesquires/JSQMessagesViewController // // // License // Copyright (c) 2014 Jesse Squires // Released under an MIT license: http://opensource.org/licenses/MIT // #import "JSQMessagesAvatarImageFactory.h" #import "UIColor+JSQMessages.h" @implementation JSQMessagesAvatarImageFactory #pragma mark - Public + (JSQMessagesAvatarImage *)avatarImageWithPlaceholder:(UIImage *)placeholderImage diameter:(NSUInteger)diameter { UIImage *circlePlaceholderImage = [JSQMessagesAvatarImageFactory jsq_circularImage:placeholderImage withDiameter:diameter highlightedColor:nil]; return [JSQMessagesAvatarImage avatarImageWithPlaceholder:circlePlaceholderImage]; } + (JSQMessagesAvatarImage *)avatarImageWithImage:(UIImage *)image diameter:(NSUInteger)diameter { UIImage *avatar = [JSQMessagesAvatarImageFactory circularAvatarImage:image withDiameter:diameter]; UIImage *highlightedAvatar = [JSQMessagesAvatarImageFactory circularAvatarHighlightedImage:image withDiameter:diameter]; return [[JSQMessagesAvatarImage alloc] initWithAvatarImage:avatar highlightedImage:highlightedAvatar placeholderImage:avatar]; } + (UIImage *)circularAvatarImage:(UIImage *)image withDiameter:(NSUInteger)diameter { return [JSQMessagesAvatarImageFactory jsq_circularImage:image withDiameter:diameter highlightedColor:nil]; } + (UIImage *)circularAvatarHighlightedImage:(UIImage *)image withDiameter:(NSUInteger)diameter { return [JSQMessagesAvatarImageFactory jsq_circularImage:image withDiameter:diameter highlightedColor:[UIColor colorWithWhite:0.1f alpha:0.3f]]; } + (JSQMessagesAvatarImage *)avatarImageWithUserInitials:(NSString *)userInitials backgroundColor:(UIColor *)backgroundColor textColor:(UIColor *)textColor font:(UIFont *)font diameter:(NSUInteger)diameter { UIImage *avatarImage = [JSQMessagesAvatarImageFactory jsq_imageWitInitials:userInitials backgroundColor:backgroundColor textColor:textColor font:font diameter:diameter]; UIImage *avatarHighlightedImage = [JSQMessagesAvatarImageFactory jsq_circularImage:avatarImage withDiameter:diameter highlightedColor:[UIColor colorWithWhite:0.1f alpha:0.3f]]; return [[JSQMessagesAvatarImage alloc] initWithAvatarImage:avatarImage highlightedImage:avatarHighlightedImage placeholderImage:avatarImage]; } #pragma mark - Private + (UIImage *)jsq_imageWitInitials:(NSString *)initials backgroundColor:(UIColor *)backgroundColor textColor:(UIColor *)textColor font:(UIFont *)font diameter:(NSUInteger)diameter { NSParameterAssert(initials != nil); NSParameterAssert(backgroundColor != nil); NSParameterAssert(textColor != nil); NSParameterAssert(font != nil); NSParameterAssert(diameter > 0); CGRect frame = CGRectMake(0.0f, 0.0f, diameter, diameter); NSDictionary *attributes = @{ NSFontAttributeName : font, NSForegroundColorAttributeName : textColor }; CGRect textFrame = [initials boundingRectWithSize:frame.size options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading) attributes:attributes context:nil]; CGPoint frameMidPoint = CGPointMake(CGRectGetMidX(frame), CGRectGetMidY(frame)); CGPoint textFrameMidPoint = CGPointMake(CGRectGetMidX(textFrame), CGRectGetMidY(textFrame)); CGFloat dx = frameMidPoint.x - textFrameMidPoint.x; CGFloat dy = frameMidPoint.y - textFrameMidPoint.y; CGPoint drawPoint = CGPointMake(dx, dy); UIImage *image = nil; UIGraphicsBeginImageContextWithOptions(frame.size, NO, [UIScreen mainScreen].scale); { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, backgroundColor.CGColor); CGContextFillRect(context, frame); [initials drawAtPoint:drawPoint withAttributes:attributes]; image = UIGraphicsGetImageFromCurrentImageContext(); } UIGraphicsEndImageContext(); return [JSQMessagesAvatarImageFactory jsq_circularImage:image withDiameter:diameter highlightedColor:nil]; } + (UIImage *)jsq_circularImage:(UIImage *)image withDiameter:(NSUInteger)diameter highlightedColor:(UIColor *)highlightedColor { NSParameterAssert(image != nil); NSParameterAssert(diameter > 0); CGRect frame = CGRectMake(0.0f, 0.0f, diameter, diameter); UIImage *newImage = nil; UIGraphicsBeginImageContextWithOptions(frame.size, NO, [UIScreen mainScreen].scale); { CGContextRef context = UIGraphicsGetCurrentContext(); UIBezierPath *imgPath = [UIBezierPath bezierPathWithOvalInRect:frame]; [imgPath addClip]; [image drawInRect:frame]; if (highlightedColor != nil) { CGContextSetFillColorWithColor(context, highlightedColor.CGColor); CGContextFillEllipseInRect(context, frame); } newImage = UIGraphicsGetImageFromCurrentImageContext(); } UIGraphicsEndImageContext(); return newImage; } @end