JMSGImageContent.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*
  2. * | | | | \ \ / / | | | | / _______|
  3. * | |____| | \ \/ / | |____| | / /
  4. * | |____| | \ / | |____| | | | _____
  5. * | | | | / \ | | | | | | |____ |
  6. * | | | | / /\ \ | | | | \ \______| |
  7. * | | | | /_/ \_\ | | | | \_________|
  8. *
  9. * Copyright (c) 2011 ~ 2015 Shenzhen HXHG. All rights reserved.
  10. */
  11. #import <Foundation/Foundation.h>
  12. #import <UIKit/UIKit.h>
  13. #import <JMessage/JMSGMediaAbstractContent.h>
  14. #import <JMessage/JMSGConstants.h>
  15. /*!
  16. * 图片内容
  17. *
  18. * 图片区分缩略图与大图.
  19. *
  20. * 大图指的创建对象时图片. 这个大图一般来说, 也是 App 对拍照或者相册里的 "原图" 经过压缩处理的.
  21. * 因为消息应用一般不会发送相册或者拍照的 "原图", 这太大了.
  22. *
  23. * 暂不支持可选 "原图" 发送功能. 有计划支持.
  24. *
  25. * 缩略图则是 SDK 根据一定的算法 (主要基于屏幕, 长宽比等), 裁减出来的一个相对小的图片,
  26. * 用于默认显示在聊天窗口.
  27. * 第一次访问缩略图后, SDK 会缓存把该数据缓存在该对象上, 所以访问多次访问会非常快,
  28. * 有利于聊天窗口滚动的性能表现.
  29. *
  30. * 收到消息时, SDK 会默认预下载缩略图, 这样查看消息就可以即时展示出来.
  31. * 而大图, 则一般是 App 预览图片调用接口时, SDK 再去发起下载.
  32. *
  33. * 针对每种资源(缩略图或者大图), 只提供一个异步接口获取数据. SDK 去做缓存,文件,下载的适配工作.
  34. */
  35. @interface JMSGImageContent : JMSGMediaAbstractContent <NSCopying>
  36. /*!
  37. * @abstract 图片链接
  38. */
  39. @property(nonatomic, strong, readonly) NSString * JMSG_NULLABLE imageLink;
  40. /*!
  41. * @abstract 图片格式
  42. *
  43. * 注意:格式后缀不需要带点,只需后缀名,如:png、jpg 等
  44. */
  45. @property(nonatomic, strong) NSString * JMSG_NULLABLE format;
  46. /*!
  47. * @abstract 图片原始大小
  48. */
  49. @property(nonatomic, assign, readonly) CGSize imageSize;
  50. /*!
  51. * @abstract 获取缩略图的本地路径
  52. *
  53. * @discussion 此属性是通过懒加载的方式获取,必须在下载完成之后此属性值才有意义
  54. */
  55. @property(nonatomic, strong, readonly) NSString * JMSG_NULLABLE thumbImageLocalPath;
  56. // 不支持使用的初始化方法
  57. - (nullable instancetype)init NS_UNAVAILABLE;
  58. /*!
  59. * @abstract 初始化消息图片内容
  60. *
  61. * @param data 图片数据
  62. *
  63. * @discussion 这是预设的初始化方法. 创建一个图片内容对象, 必须要传入图片数据.
  64. *
  65. * 对于图片消息, 一般来说创建此图片内容的数据, 是对拍照原图经过裁减处理的, 否则发图片消息太大.
  66. * 这里传入的图片数据, SDK视为大图. 方法 largeImageDataWithProgress:completionHandler 下载到的,
  67. * 就是这个概念上的图片数据.
  68. */
  69. - (nullable instancetype)initWithImageData:(NSData * JMSG_NONNULL)data;
  70. /*!
  71. * @abstract 获取图片消息的缩略图数据
  72. *
  73. * @param handler 结果回调。回调参数:
  74. *
  75. * - data 图片数据;
  76. * - objectId 消息msgId;
  77. * - error 不为nil表示出错;
  78. *
  79. * 如果 error 为 ni, data 也为 nil, 表示没有数据.
  80. *
  81. * @discussion 展示缩略时调用此接口,获取缩略图数据。
  82. * 如果本地数据文件已经存在, 则直接返回;
  83. * 如果本地还没有图片,会发起网络请求下载。下载完后再回调。
  84. */
  85. - (void)thumbImageData:(JMSGAsyncDataHandler JMSG_NULLABLE)handler;
  86. /*!
  87. * @abstract 获取图片消息的大图数据
  88. *
  89. * @param progressHandler 下载进度。会持续回调更新进度, 直接下载完成。如果为 nil 则表示不关心进度。
  90. * @param handler 结果回调。回调参数:
  91. *
  92. * - data 图片数据;
  93. * - objectId 消息msgId;
  94. * - error 不为nil表示出错;
  95. *
  96. * 如果 error 为 ni, data 也为 nil, 表示没有数据.
  97. *
  98. * @discussion 一般在预览图片大图时,要用此接口。
  99. * 如果本地数据文件已经存在, 则直接返回;
  100. * 如果本地还没有图片,会发起网络请求下载。下载完后再回调。
  101. */
  102. - (void)largeImageDataWithProgress:(JMSGMediaProgressHandler JMSG_NULLABLE)progressHandler
  103. completionHandler:(JMSGAsyncDataHandler JMSG_NULLABLE)handler;
  104. @end