|
|
@ -3,10 +3,12 @@
|
|
|
|
//
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
#import "OWSAvatarBuilder.h"
|
|
|
|
#import "OWSAvatarBuilder.h"
|
|
|
|
|
|
|
|
#import "JSQMessagesAvatarImageFactory.h"
|
|
|
|
#import "OWSContactAvatarBuilder.h"
|
|
|
|
#import "OWSContactAvatarBuilder.h"
|
|
|
|
#import "OWSGroupAvatarBuilder.h"
|
|
|
|
#import "OWSGroupAvatarBuilder.h"
|
|
|
|
#import "TSContactThread.h"
|
|
|
|
#import "TSContactThread.h"
|
|
|
|
#import "TSGroupThread.h"
|
|
|
|
#import "TSGroupThread.h"
|
|
|
|
|
|
|
|
#import "UIColor+OWS.h"
|
|
|
|
|
|
|
|
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
|
|
|
|
|
|
@ -27,6 +29,45 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
return [avatarBuilder build];
|
|
|
|
return [avatarBuilder build];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ (UIImage *)buildRandomAvatarWithDiameter:(NSUInteger)diameter
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
NSArray<NSString *> *eyes = @[ @":", @"=", @"8", @"B" ];
|
|
|
|
|
|
|
|
NSArray<NSString *> *mouths = @[ @"3", @")", @"(", @"|", @"\\", @"P", @"D", @"o" ];
|
|
|
|
|
|
|
|
// eyebrows are rare
|
|
|
|
|
|
|
|
NSArray<NSString *> *eyebrows = @[ @">", @"", @"", @"", @"" ];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NSString *randomEye = eyes[arc4random_uniform((uint32_t)eyes.count)];
|
|
|
|
|
|
|
|
NSString *randomMouth = mouths[arc4random_uniform((uint32_t)mouths.count)];
|
|
|
|
|
|
|
|
NSString *randomEyebrow = eyebrows[arc4random_uniform((uint32_t)eyebrows.count)];
|
|
|
|
|
|
|
|
NSString *face = [NSString stringWithFormat:@"%@%@%@", randomEyebrow, randomEye, randomMouth];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CGFloat fontSize = (CGFloat)(diameter / 2.4);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UIImage *srcImage =
|
|
|
|
|
|
|
|
[[JSQMessagesAvatarImageFactory avatarImageWithUserInitials:face
|
|
|
|
|
|
|
|
backgroundColor:[UIColor colorWithRGBHex:0xaca6633]
|
|
|
|
|
|
|
|
textColor:[UIColor whiteColor]
|
|
|
|
|
|
|
|
font:[UIFont boldSystemFontOfSize:fontSize]
|
|
|
|
|
|
|
|
diameter:diameter] avatarImage];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UIGraphicsBeginImageContext(srcImage.size);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CGContextRef context = UIGraphicsGetCurrentContext();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CGFloat width = srcImage.size.width;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Rotate
|
|
|
|
|
|
|
|
CGContextTranslateCTM(context, width / 2, width / 2);
|
|
|
|
|
|
|
|
CGContextRotateCTM(context, (CGFloat)M_PI_2);
|
|
|
|
|
|
|
|
CGContextTranslateCTM(context, -width / 2, -width / 2);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[srcImage drawAtPoint:CGPointMake(0, 0)];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
|
|
|
|
|
|
|
|
UIGraphicsEndImageContext();
|
|
|
|
|
|
|
|
return image;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- (UIImage *)build
|
|
|
|
- (UIImage *)build
|
|
|
|
{
|
|
|
|
{
|
|
|
|
UIImage *_Nullable savedImage = [self buildSavedImage];
|
|
|
|
UIImage *_Nullable savedImage = [self buildSavedImage];
|
|
|
|