WFCCImageMessageContent.m 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. //
  2. // WFCCImageMessageContent.m
  3. // WFChatClient
  4. //
  5. // Created by heavyrain on 2017/9/2.
  6. // Copyright © 2017年 wildfire chat. All rights reserved.
  7. //
  8. #import "WFCCImageMessageContent.h"
  9. #import "WFCCNetworkService.h"
  10. #import "WFCCIMService.h"
  11. #import "WFCCUtilities.h"
  12. #import "Common.h"
  13. @interface WFCCImageMessageContent ()
  14. @property (nonatomic, assign)CGSize size;
  15. @end
  16. @implementation WFCCImageMessageContent
  17. + (instancetype)contentFrom:(UIImage *)image {
  18. WFCCImageMessageContent *content = [[WFCCImageMessageContent alloc] init];
  19. UInt64 recordTime = [[NSDate date] timeIntervalSince1970]*1000;
  20. NSString *path = [[WFCCUtilities getDocumentPathWithComponent:@"/IMG"] stringByAppendingPathComponent:[NSString stringWithFormat:@"img%lld.jpg", recordTime]];
  21. image = [WFCCUtilities generateThumbnail:image withWidth:1024 withHeight:1024];
  22. NSData *imgData = UIImageJPEGRepresentation(image, 0.85);
  23. [imgData writeToFile:path atomically:YES];
  24. content.localPath = path;
  25. content.size = image.size;
  26. content.thumbnail = [WFCCUtilities generateThumbnail:image withWidth:120 withHeight:120];
  27. return content;
  28. }
  29. - (WFCCMessagePayload *)encode {
  30. WFCCMediaMessagePayload *payload = [[WFCCMediaMessagePayload alloc] init];
  31. payload.extra = self.extra;
  32. payload.contentType = [self.class getContentType];
  33. payload.searchableContent = @"[图片]";
  34. NSMutableDictionary *dataDict = [NSMutableDictionary dictionary];
  35. if (self.thumbParameter.length && self.size.width > 0) {
  36. [dataDict setValue:self.thumbParameter forKey:@"tp"];
  37. [dataDict setValue:@(self.size.width) forKey:@"w"];
  38. [dataDict setValue:@(self.size.height) forKey:@"h"];
  39. } else if (![[WFCCIMService sharedWFCIMService] imageThumbPara]) {
  40. dataDict = nil;
  41. payload.binaryContent = UIImageJPEGRepresentation(self.thumbnail, 0.45);
  42. } else {
  43. UIImage *image = [UIImage imageWithContentsOfFile:self.localPath];
  44. if (image) {
  45. [dataDict setValue:[[WFCCIMService sharedWFCIMService] imageThumbPara] forKey:@"tp"];
  46. [dataDict setValue:@(image.size.width) forKey:@"w"];
  47. [dataDict setValue:@(image.size.height) forKey:@"h"];
  48. } else {
  49. payload.binaryContent = UIImageJPEGRepresentation(self.thumbnail, 0.45);
  50. dataDict = nil;
  51. }
  52. }
  53. if (dataDict) {
  54. NSData *data = [NSJSONSerialization dataWithJSONObject:dataDict
  55. options:kNilOptions
  56. error:nil];
  57. payload.content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  58. }
  59. payload.mediaType = Media_Type_IMAGE;
  60. payload.remoteMediaUrl = self.remoteUrl;
  61. payload.localMediaPath = self.localPath;
  62. return payload;
  63. }
  64. - (void)decode:(WFCCMessagePayload *)payload {
  65. [super decode:payload];
  66. if ([payload isKindOfClass:[WFCCMediaMessagePayload class]]) {
  67. WFCCMediaMessagePayload *mediaPayload = (WFCCMediaMessagePayload *)payload;
  68. if ([payload.binaryContent length]) {
  69. self.thumbnail = [UIImage imageWithData:payload.binaryContent];
  70. }
  71. self.remoteUrl = mediaPayload.remoteMediaUrl;
  72. self.localPath = mediaPayload.localMediaPath;
  73. if (mediaPayload.content.length) {
  74. NSError *__error = nil;
  75. NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:[payload.content dataUsingEncoding:NSUTF8StringEncoding]
  76. options:kNilOptions
  77. error:&__error];
  78. if (!__error) {
  79. NSString *str1 = dictionary[@"w"];
  80. NSString *str2 = dictionary[@"h"];
  81. self.thumbParameter = dictionary[@"tp"];
  82. self.size = CGSizeMake([str1 intValue], [str2 intValue]);
  83. }
  84. }
  85. }
  86. }
  87. - (UIImage *)thumbnail {
  88. if (!_thumbnail && self.localPath.length) {
  89. UIImage *image = [UIImage imageWithContentsOfFile:self.localPath];
  90. _thumbnail = [WFCCUtilities generateThumbnail:image withWidth:120 withHeight:120];
  91. }
  92. return _thumbnail;
  93. }
  94. + (int)getContentType {
  95. return MESSAGE_CONTENT_TYPE_IMAGE;
  96. }
  97. + (int)getContentFlags {
  98. return WFCCPersistFlag_PERSIST_AND_COUNT;
  99. }
  100. + (void)load {
  101. [[WFCCIMService sharedWFCIMService] registerMessageContent:self];
  102. }
  103. - (NSString *)digest:(WFCCMessage *)message {
  104. return @"[图片]";
  105. }
  106. @end