iTools.mm 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744
  1. //
  2. // iTools.m
  3. // VclustersGemini
  4. //
  5. // Created by 余衡武 on 2020/4/1.
  6. // Copyright © 2020 APPLE. All rights reserved.
  7. //
  8. #import "iTools.h"
  9. #import "CommonCrypto/CommonDigest.h"
  10. #import <CommonCrypto/CommonCrypto.h>
  11. @implementation iTools
  12. #pragma mark 字典、数组转JSONString
  13. /** 字典转JSONString */
  14. + (NSString *)getJSONStringFromDictionary:(NSDictionary *)dict {
  15. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
  16. NSString *jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  17. return jsonStr;
  18. }
  19. /** 数组转JSONString */
  20. + (NSString *)getJSONStringFromArray:(NSArray *)array {
  21. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:nil];
  22. NSString *jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  23. return jsonStr;
  24. }
  25. #pragma mark 时间戳
  26. /** 获取当前时间戳-以秒为单位-return NSInteger */
  27. + (NSInteger)getNowTimeStamp {
  28. return [[NSDate date] timeIntervalSince1970];
  29. }
  30. /** 获取当前时间戳-以秒为单位-return yyyy/MM/dd HH:mm */
  31. + (NSString *)getNowTimeString {
  32. NSDate *nowDate = [NSDate date];
  33. NSDateFormatter *format = [[NSDateFormatter alloc] init];
  34. [format setDateFormat:@"yyyy/MM/dd HH:mm"];
  35. NSString *dateStr = [format stringFromDate:nowDate];
  36. return dateStr;
  37. }
  38. /** 获取当前时间戳-以秒为单位-return yyyyy年MM月dd日 HH:mm:ss */
  39. + (NSString *)getNowTimeString1 {
  40. NSDate *nowDate = [NSDate date];
  41. NSDateFormatter *format = [[NSDateFormatter alloc] init];
  42. [format setDateFormat:@"yyyy年MM月dd日 HH:mm:ss"];
  43. NSString *dateStr = [format stringFromDate:nowDate];
  44. return dateStr;
  45. }
  46. /** 获取当前时间戳-以秒为单位-return yyyyy-MM-dd HH:mm:ss */
  47. + (NSString *)getNowTimeString2 {
  48. NSDate *nowDate = [NSDate date];
  49. NSDateFormatter *format = [[NSDateFormatter alloc] init];
  50. [format setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  51. NSString *dateStr = [format stringFromDate:nowDate];
  52. return dateStr;
  53. }
  54. /** 获取当前时间戳-以毫秒为单位-return NSInteger */
  55. + (NSInteger)getNowTimeStampSS {
  56. NSDate *dateValue = [NSDate date];
  57. NSTimeInterval second = [dateValue timeIntervalSince1970];
  58. long long dTime = [[NSNumber numberWithDouble:second*1000] longLongValue];
  59. return dTime;
  60. }
  61. /** 获取当前时间戳-以毫秒为单位--return YYYYMMddhhmmssSSS */
  62. + (NSString *)getNowTimeStampString {
  63. NSString* date;
  64. NSDateFormatter * formatter = [[NSDateFormatter alloc ] init];
  65. [formatter setDateFormat:@"YYYYMMddhhmmssSSS"];
  66. date = [formatter stringFromDate:[NSDate date]];
  67. NSString *timeNow = [NSString stringWithFormat:@"%@", date];
  68. return timeNow;
  69. }
  70. /** 获取当前时间戳-以天为单位--return yyyy-MM-dd */
  71. + (NSString *)getNowDateString {
  72. NSDate *nowDate = [NSDate date];
  73. NSDateFormatter *format = [[NSDateFormatter alloc] init];
  74. [format setDateFormat:@"yyyy-MM-dd"];
  75. NSString *dateStr = [format stringFromDate:nowDate];
  76. return dateStr;
  77. }
  78. /** 获取现在到某个时间点的时间戳*/
  79. + (NSInteger)getNowTimeStampToInterval:(NSTimeInterval)second {
  80. long long dTime = [[NSNumber numberWithDouble:second*1000] longLongValue];
  81. return dTime;
  82. }
  83. /** 把字符串转时间戳Date YYYYMMddhhmmssSSS*/
  84. + (NSDate *)getTimeStringToDate:(NSString *)timeStr{
  85. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  86. //需要设置为和字符串相同的格式
  87. [dateFormatter setDateFormat:@"YYYYMMddhhmmssSSS"];
  88. NSDate *localDate = [dateFormatter dateFromString:timeStr];
  89. return localDate;
  90. }
  91. /**时间戳转字符串-yyyy/MM/dd HH:mm*/
  92. + (NSString *)getTimeStringFromTimeInterval:(NSInteger)timeInterval {
  93. NSDate *date = [[NSDate alloc]initWithTimeIntervalSince1970:timeInterval];
  94. NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
  95. [formatter setDateFormat:@"yyyy/MM/dd HH:mm"];
  96. NSString *timeString = [formatter stringFromDate:date];
  97. return timeString;
  98. }
  99. /** 秒转播放时间HH:mm:ss */
  100. + (NSString *)getPlayTimeStringFromTimeInterval:(NSTimeInterval)timeInterval {
  101. NSInteger seconds = timeInterval;
  102. //format of hour
  103. NSString *str_hour = [NSString stringWithFormat:@"%02ld",seconds/3600];
  104. //format of minut
  105. NSString *str_minute = [NSString stringWithFormat:@"%02ld",(seconds%3600)/60];
  106. //format of second
  107. NSString *str_second = [NSString stringWithFormat:@"%02ld",seconds%60];
  108. //format of time
  109. NSString *format_time = [NSString stringWithFormat:@"%@:%@:%@",str_hour,str_minute,str_second];
  110. return format_time;
  111. }
  112. #pragma mark 通讯录备份
  113. //ypp add 通讯录文件名格式YmdHis+随机数字(1000~9999) 2020 07 07 15 08 25 1000
  114. + (NSString *)getContactsNameStr {
  115. NSString* date;
  116. NSDateFormatter * formatter = [[NSDateFormatter alloc ] init];
  117. [formatter setDateFormat:@"YYYYMMddhhmmss"];
  118. date = [formatter stringFromDate:[NSDate date]];
  119. int randomNumber = (int) arc4random_uniform(9999) + 1000;
  120. NSString *contactsNameStr = [NSString stringWithFormat:@"%@%d",date,randomNumber];
  121. return contactsNameStr;
  122. }
  123. //ypp add 推流业务随机生成6位数的字符串
  124. + (NSString *)getTaskUidStr {
  125. int randomNumber = (int) arc4random_uniform(999999) + 100000;
  126. NSString *strRandom = [NSString stringWithFormat:@"%d",randomNumber];
  127. return strRandom;
  128. }
  129. #pragma mark 绘制图片UIImage
  130. /** 根据颜色绘制图片 */
  131. + (UIImage*)createImageWithColor:(UIColor *)color
  132. {
  133. CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
  134. UIGraphicsBeginImageContext(rect.size);
  135. CGContextRef context = UIGraphicsGetCurrentContext();
  136. CGContextSetFillColorWithColor(context, [color CGColor]);
  137. CGContextFillRect(context, rect);
  138. UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  139. UIGraphicsEndImageContext();
  140. return image;
  141. }
  142. /** 根据颜色和view 绘制指定大小的图片 */
  143. + (UIImage *)imageFromColor:(UIColor *)color view:(UIView *)view {
  144. CGRect rect = CGRectMake(0, 0, view.frame.size.width, view.frame.size.height);
  145. UIGraphicsBeginImageContext(rect.size);
  146. CGContextRef context = UIGraphicsGetCurrentContext();
  147. CGContextSetFillColorWithColor(context, [color CGColor]);
  148. CGContextFillRect(context, rect);
  149. UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
  150. UIGraphicsEndImageContext();
  151. return img;
  152. }
  153. /** 根据颜色和rect 绘制指定大小的图片 */
  154. + (UIImage *)getImageFromColor:(UIColor *)color rect:(CGRect)rect {
  155. UIGraphicsBeginImageContext(rect.size);
  156. CGContextRef context = UIGraphicsGetCurrentContext();
  157. CGContextSetFillColorWithColor(context, [color CGColor]);
  158. CGContextFillRect(context, rect);
  159. UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
  160. UIGraphicsEndImageContext();
  161. return img;
  162. }
  163. /** 根据颜色和size 绘制指定大小的图片 */
  164. + (UIImage *)createImageWithColor:(UIColor *)color withSize:(CGSize)size {
  165. CGRect rect = CGRectMake(0.0f, 0.0f, size.width, size.height);
  166. UIGraphicsBeginImageContextWithOptions(rect.size,NO,[UIScreen mainScreen].scale);
  167. CGContextRef context = UIGraphicsGetCurrentContext();
  168. CGContextSetFillColorWithColor(context, [color CGColor]);
  169. CGContextFillRect(context, rect);
  170. UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
  171. UIGraphicsEndImageContext();
  172. return theImage;
  173. }
  174. /**根据uiview得到图像UIImage*/
  175. + (UIImage *)getImageFromView:(UIView *)fromView useScreenScale:(BOOL)use useNewMethod:(BOOL)useNewMethod
  176. {
  177. UIImage *viewImage = nil;
  178. if (([[[UIDevice currentDevice] systemVersion] doubleValue] > 7) && useNewMethod) {
  179. UIGraphicsBeginImageContextWithOptions(fromView.bounds.size, NO, [[UIScreen mainScreen] scale]);
  180. [fromView drawViewHierarchyInRect:fromView.bounds afterScreenUpdates:NO];
  181. viewImage = UIGraphicsGetImageFromCurrentImageContext();
  182. UIGraphicsEndImageContext();
  183. } else {
  184. NSInteger scale = use ? [[UIScreen mainScreen] scale] : 1;
  185. UIGraphicsBeginImageContextWithOptions(CGSizeMake(fromView.bounds.size.width, fromView.bounds.size.height), NO, scale);
  186. [fromView.layer renderInContext:UIGraphicsGetCurrentContext()];
  187. viewImage = UIGraphicsGetImageFromCurrentImageContext();
  188. UIGraphicsEndImageContext();
  189. }
  190. return viewImage;
  191. }
  192. // 彩色图变黑白图
  193. + (UIImage*)getGrayImageFromImage:(UIImage*)sourceImage {
  194. int width = sourceImage.size.width-2;
  195. int height = sourceImage.size.height;
  196. CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
  197. CGContextRef context = CGBitmapContextCreate (nil, width, height,8,0, colorSpace,kCGImageAlphaNone);
  198. CGColorSpaceRelease(colorSpace);
  199. if (context ==NULL) {
  200. return nil;
  201. }
  202. CGContextDrawImage(context,CGRectMake(0,0, width, height), sourceImage.CGImage);
  203. UIImage *grayImage = [UIImage imageWithCGImage:CGBitmapContextCreateImage(context)];
  204. CGContextRelease(context);
  205. return grayImage;
  206. }
  207. #pragma mark 绘制圆角
  208. /**圆角切割*/
  209. + (CAShapeLayer *)getCornerRoundWithSelfView:(UIView *)originalView byRoundingCorners:(UIRectCorner)corners cornerRect:(CGRect)rect {
  210. UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corners cornerRadii:CGSizeMake(10, 10)];
  211. CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
  212. maskLayer.frame = originalView.bounds;
  213. maskLayer.path = maskPath.CGPath;
  214. return maskLayer;
  215. }
  216. + (CAShapeLayer *)getCornerRoundWithSelfView:(UIView *)originalView byRoundingCorners:(UIRectCorner)corners cornerRect:(CGRect)rect radius:(CGFloat)radius {
  217. UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corners cornerRadii:CGSizeMake(radius, radius)];
  218. CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
  219. maskLayer.frame = originalView.bounds;
  220. maskLayer.path = maskPath.CGPath;
  221. return maskLayer;
  222. }
  223. #pragma mark 小数取整 不四舍五入.
  224. /** 小数取整 不四舍五入 */
  225. + (NSString *)notRounding:(float)price afterPoint:(int)position {
  226. NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:position raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
  227. NSDecimalNumber *ouncesDecimal = [[NSDecimalNumber alloc] initWithFloat:price];
  228. NSDecimalNumber *roundedOunces = [ouncesDecimal decimalNumberByRoundingAccordingToBehavior:roundingBehavior];
  229. return [NSString stringWithFormat:@"%@%%",roundedOunces];
  230. }
  231. /** 小数取整 不四舍五入 */
  232. + (CGFloat)notRoundingFloat:(float)price afterPoint:(int)position {
  233. NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:position raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
  234. NSDecimalNumber *ouncesDecimal = [[NSDecimalNumber alloc] initWithFloat:price];
  235. NSDecimalNumber *roundedOunces = [ouncesDecimal decimalNumberByRoundingAccordingToBehavior:roundingBehavior];
  236. return [roundedOunces floatValue];
  237. }
  238. /** 小数点格式化*/
  239. + (NSString *)formatFloat:(float)f
  240. {
  241. if (fmodf(f, 1)==0) {//如果有一位小数点
  242. return [NSString stringWithFormat:@"%.0f",f];
  243. } else if (fmodf(f*10, 1)==0) {//如果有两位小数点
  244. return [NSString stringWithFormat:@"%.1f",f];
  245. } else {
  246. return [NSString stringWithFormat:@"%.2f",f];
  247. }
  248. }
  249. #pragma mark 字符串处理
  250. /** 去除字符串中所有的空格和换行符(包括中间和首尾) */
  251. + (NSString *)removeSpaceAndNewline:(NSString *)str
  252. {
  253. NSString *temp = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
  254. temp = [temp stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; //去除掉首尾的空白字符和换行字符
  255. temp = [temp stringByReplacingOccurrencesOfString:@"\r" withString:@""];
  256. temp = [temp stringByReplacingOccurrencesOfString:@"\n" withString:@""];
  257. return temp;
  258. }
  259. /** 获取拼音首字母(传入汉字字符串, 返回大写拼音首字母)*/
  260. + (NSString *)FirstCharactor:(NSString *)pString
  261. {
  262. //转成了可变字符串
  263. NSMutableString *pStr = [NSMutableString stringWithString:pString];
  264. //先转换为带声调的拼音
  265. CFStringTransform((CFMutableStringRef)pStr,NULL, kCFStringTransformMandarinLatin,NO);
  266. //再转换为不带声调的拼音
  267. CFStringTransform((CFMutableStringRef)pStr,NULL, kCFStringTransformStripDiacritics,NO);
  268. //转化为大写拼音
  269. NSString *pPinYin = [pStr capitalizedString];
  270. //获取并返回首字母
  271. return [pPinYin substringToIndex:1];
  272. }
  273. #pragma mark 系统语言
  274. /** 获取当前系统的语言 */
  275. + (NSString *)getCurrentLocalizableLanguage {
  276. NSArray *languages = [NSLocale preferredLanguages];
  277. NSString *currentLanguage = [languages objectAtIndex:0];
  278. return currentLanguage;
  279. }
  280. /** 当前语言是否为中文 */
  281. + (BOOL)isChineseLanguage {
  282. NSString *currentLanguage = [self getCurrentLocalizableLanguage];
  283. if ([currentLanguage rangeOfString:@"^zh-" options:NSRegularExpressionSearch range:NSMakeRange(0, currentLanguage.length)].location != NSNotFound) {
  284. return YES;
  285. }
  286. return NO;
  287. }
  288. #pragma mark push到指定vc
  289. /**push到vc 控制器
  290. * 1、NavigationController之前有push过就back
  291. * 2、NavigationController之前没有push过就push
  292. */
  293. + (void)pushVCWithBackOrPushFromNvc:(UINavigationController *)nvc toVc:(UIViewController *)vc {
  294. BOOL isBack = NO; // 是返回 还是push
  295. for (UIViewController *controller in nvc.viewControllers) {
  296. if ([controller isKindOfClass:[vc class]]) {
  297. [nvc popToViewController:controller animated:YES];
  298. isBack = YES;
  299. }
  300. }
  301. if (!isBack) {
  302. [nvc pushViewController:vc animated:YES];
  303. }
  304. }
  305. #pragma mark 文件大小格式化
  306. /**将文件大小B 自动转成对应的B KB MB GB**/
  307. + (NSString *)getFileSizeStringFormedValue:(NSInteger)value
  308. {
  309. double convertedValue = value*1.0;
  310. int multiplyFactor = 0;
  311. NSArray *tokens = [NSArray arrayWithObjects:@"B",@"KB",@"MB",@"GB",@"TB",nil];
  312. while (convertedValue > 1024 && multiplyFactor < tokens.count) {
  313. convertedValue /= 1024;
  314. multiplyFactor++;
  315. }
  316. NSString *text = [NSString stringWithFormat:@"%4.2f%@",convertedValue, [tokens objectAtIndex:multiplyFactor]];
  317. if ([text isEqualToString:@"0.00B"]) {
  318. text = @"0B";
  319. }
  320. return text;
  321. }
  322. #pragma mark 获取文件MD5值
  323. /**获取文件MD5值*/
  324. #define FileHashDefaultChunkSizeForReadingData 1024*8
  325. + (NSString*)getFileMD5WithPath:(NSString*)path {
  326. NSFileManager *fileManager = [NSFileManager defaultManager];
  327. if([fileManager fileExistsAtPath:path isDirectory:nil])
  328. {
  329. NSData *data = [NSData dataWithContentsOfFile:path];
  330. unsigned char digest[CC_MD5_DIGEST_LENGTH];
  331. CC_MD5( data.bytes, (CC_LONG)data.length, digest );
  332. NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
  333. for( int i = 0; i < CC_MD5_DIGEST_LENGTH; i++ )
  334. {
  335. [output appendFormat:@"%02x", digest[i]];
  336. }
  337. return output;
  338. }
  339. else
  340. {
  341. return @"";
  342. }
  343. }
  344. #pragma mark 关闭声音
  345. /**关闭其他播放声音*/
  346. + (void)closeVoice {
  347. NSError *categoryError = nil;
  348. BOOL success = [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&categoryError];
  349. if (!success)
  350. {
  351. HLog(@"Error setting audio session category: %@", categoryError);
  352. }
  353. NSError *activeError = nil;
  354. success = [[AVAudioSession sharedInstance] setActive:NO error:&activeError];
  355. if (!success)
  356. {
  357. HLog(@"Error setting audio session active: %@", activeError);
  358. }
  359. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // 恢复声音
  360. NSError *activeError1 = nil;
  361. BOOL success1 = [[AVAudioSession sharedInstance] setActive:YES error:&activeError1];
  362. if (!success1)
  363. {
  364. HLog(@"Error setting audio session active: %@", activeError1);
  365. }
  366. });
  367. }
  368. #pragma mark 其他
  369. /**防止N秒内,同部同接口频繁调用的处理*/
  370. + (BOOL)timeOverTosecode:(NSInteger)index bannerOldTime:(NSString *)bannerOldTime;
  371. {
  372. BOOL reFreshDevice_flag = YES;
  373. NSString *nowTime = [iTools getNowTimeStampString];
  374. NSString *oldTime = nil;
  375. if (![bannerOldTime isEqual:@""]) {
  376. oldTime = bannerOldTime;
  377. }
  378. //比较
  379. if ([oldTime length] > 0) {
  380. //时间差
  381. NSDate *dateNow = [iTools getTimeStringToDate:nowTime];
  382. NSDate *dateOld = [iTools getTimeStringToDate:oldTime];
  383. NSTimeInterval distanceBetweenDates = [dateNow timeIntervalSinceDate:dateOld];
  384. long long min = [[NSNumber numberWithDouble:distanceBetweenDates] longLongValue];
  385. if (min < index)
  386. {
  387. reFreshDevice_flag = NO;
  388. }else{
  389. reFreshDevice_flag = YES;
  390. }
  391. }
  392. return reFreshDevice_flag;
  393. }
  394. // 根据文件ID 获取文件中心文件URL地址
  395. + (NSURL *)getFileUrlFromFileID:(NSString *)ID {
  396. NSString *fileUrl = [NSString stringWithFormat:@"%@/document/newFile/download/0/%@?fileKey=%@",FileService,Const_File_Access_Key,ID];
  397. return [NSURL URLWithString:fileUrl];
  398. }
  399. // 显示base64二进制图片
  400. + (void)setImageView:(UIImageView *)imageView WithBase64String:(NSString *)avatar {
  401. //参数在这里 + (void) setImageView:(UIImageView *)imageView WithString:(NSString *)avatar
  402. //二进制显示
  403. /*服务器返回:例如
  404. data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAABnRSTlMAAAAAAABupgeRAAAAhElEQVRYhe3Y0QmAIBhF4YwGaZRGaNRGaJRGaYEyTj/RfTjnVYQPBRXbuh9DXuPfgOtkkWSRZJFkkUJZU3H+tsx3Q5VrLXS1ZJFkkWSRZJFkkWSRZJFkkUJZLfPH5vktX3mtv54buomySLJIskihrNBTvvWHP0V37oDQTZRFkkWSRQplnQDfEjVVBe3tAAAAAElFTkSuQmCC
  405. *上面的字符串复制到浏览器是可以显示出来一个图片的,这里说一下,字符串前面的data:image/png;base64是这个图片的格式,
  406. * web上面 解析好像是需要这部分的,但是拿到我们的iOS平台上,是不需要这部分的,有这部分反而解析不出来图片。
  407. * 所以这里可以说这部分属于格式部分,so我们显示的时候不要这部分。
  408. */
  409. NSArray *imageArray = [avatar componentsSeparatedByString:@","];
  410. NSData *imageData = [[NSData alloc] initWithBase64EncodedString:imageArray[1] options:NSDataBase64DecodingIgnoreUnknownCharacters];
  411. UIImage *image = [UIImage imageWithData:imageData];
  412. imageView.image = [iTools cutAlphaZero:image];
  413. }
  414. /// iOS裁剪掉图片周围透明度为0的部分
  415. + (UIImage *)cutAlphaZero:(UIImage *)image {
  416. CGImageRef cgimage = [image CGImage];
  417. size_t width = CGImageGetWidth(cgimage); // 图片宽度
  418. size_t height = CGImageGetHeight(cgimage); // 图片高度
  419. unsigned char *data = (unsigned char *)calloc(width * height * 4, sizeof(unsigned char)); // 取图片首地址
  420. size_t bitsPerComponent = 8; // r g b a 每个component bits数目
  421. size_t bytesPerRow = width * 4; // 一张图片每行字节数目 (每个像素点包含r g b a 四个字节)
  422. CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); // 创建rgb颜色空间
  423. CGContextRef context = CGBitmapContextCreate(data, width,height,bitsPerComponent,bytesPerRow,space,kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
  424. CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgimage);
  425. int top = 0; // 上边框透明高度
  426. int left = 0; // 左边框透明高度
  427. int right = 0; // 右边框透明高度
  428. int bottom = 0; // 底边框透明高度
  429. for (size_t row = 0; row < height; row++) {
  430. BOOL find = false;
  431. for (size_t col = 0; col < width; col++) {
  432. size_t pixelIndex = (row * width + col) * 4;
  433. // int red = data[pixelIndex];
  434. // int green = data[pixelIndex+1];
  435. // int blue = data[pixelIndex + 2];
  436. int alpha = data[pixelIndex + 3];
  437. if (alpha != 0) {
  438. find = YES;
  439. break;
  440. }
  441. }
  442. if (find) {
  443. break;
  444. }
  445. top ++;
  446. }
  447. for (size_t col = 0; col < width; col++) {
  448. BOOL find = false;
  449. for (size_t row = 0; row < height; row++) {
  450. size_t pixelIndex = (row * width + col) * 4;
  451. int alpha = data[pixelIndex + 3];
  452. if (alpha != 0) {
  453. find = YES;
  454. break;
  455. }
  456. }
  457. if (find) {
  458. break;
  459. }
  460. left ++;
  461. }
  462. for (size_t col = width - 1; col > 0; col--) {
  463. BOOL find = false;
  464. for (size_t row = 0; row < height; row++) {
  465. size_t pixelIndex = (row * width + col) * 4;
  466. int alpha = data[pixelIndex + 3];
  467. if (alpha != 0) {
  468. find = YES;
  469. break;
  470. }
  471. }
  472. if (find) {
  473. break;
  474. }
  475. right ++;
  476. }
  477. for (size_t row = height - 1; row > 0; row--) {
  478. BOOL find = false;
  479. for (size_t col = 0; col < width; col++) {
  480. size_t pixelIndex = (row * width + col) * 4;
  481. int alpha = data[pixelIndex + 3];
  482. if (alpha != 0) {
  483. find = YES;
  484. break;
  485. }
  486. }
  487. if (find) {
  488. break;
  489. }
  490. bottom ++;
  491. }
  492. CGFloat scale = image.scale;
  493. CGImageRef newImageRef = CGImageCreateWithImageInRect(cgimage, CGRectMake(left * scale, top *scale, (image.size.width - left - right)*scale, (image.size.height - top - bottom)*scale));
  494. UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
  495. // 释放
  496. CGImageRelease(cgimage);
  497. CGContextRelease(context);
  498. CGColorSpaceRelease(space);
  499. return newImage;
  500. }
  501. + (NSUInteger)getIndexFromCloudPhoneListWithModel:(CloudPhoneModel *)model {
  502. NSUInteger index = 0;
  503. for (NSUInteger i = 0; i < [UseAccountManage shareInstance].cloudPhoneListModel.diskInfo.count; i++) {
  504. CloudPhoneModel *itemModel = [[UseAccountManage shareInstance].cloudPhoneListModel.diskInfo objectAtIndex:i];
  505. if (itemModel.phoneId == model.phoneId) {
  506. index = i;
  507. break;
  508. }
  509. }
  510. return index;
  511. }
  512. + (NSUInteger)getIndexFromCloudPhoneListWithPhoneID:(NSInteger)phoneId {
  513. NSUInteger index = 0;
  514. for (NSUInteger i = 0; i < [UseAccountManage shareInstance].cloudPhoneListModel.diskInfo.count; i++) {
  515. CloudPhoneModel *itemModel = [[UseAccountManage shareInstance].cloudPhoneListModel.diskInfo objectAtIndex:i];
  516. if (itemModel.phoneId == phoneId) {
  517. index = i;
  518. break;
  519. }
  520. }
  521. return index;
  522. }
  523. + (NSDate *)getInternetDate{
  524. NSString *urlString = @"http://m.baidu.com";
  525. urlString = [urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
  526. // 实例化NSMutableURLRequest,并进行参数配置
  527. NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
  528. [request setURL:[NSURL URLWithString: urlString]];
  529. [request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
  530. [request setTimeoutInterval: 2];
  531. [request setHTTPShouldHandleCookies:FALSE];
  532. [request setHTTPMethod:@"GET"];
  533. NSError *error = nil;
  534. NSHTTPURLResponse *response;
  535. [NSURLConnection sendSynchronousRequest:request
  536. returningResponse:&response error:&error];
  537. // 处理返回的数据
  538. if (error) {
  539. return [NSDate date];
  540. }
  541. NSString *date = [[response allHeaderFields] objectForKey:@"Date"];
  542. date = [date substringFromIndex:5];//index到这个字符串的结尾
  543. date = [date substringToIndex:[date length]-4];//从索引0到给定的索引index
  544. NSDateFormatter *dMatter = [[NSDateFormatter alloc] init];
  545. dMatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
  546. [dMatter setDateFormat:@"dd MMM yyyy HH:mm:ss"];
  547. NSDate *netDate = [dMatter dateFromString:date];//时间差8小时
  548. NSTimeZone *zone = [NSTimeZone systemTimeZone];
  549. NSInteger interval = [zone secondsFromGMTForDate: netDate];
  550. netDate = [netDate dateByAddingTimeInterval: interval];
  551. return netDate;
  552. }
  553. + (NSString *)getInternetDateString{
  554. NSString *urlString = @"http://m.baidu.com";
  555. urlString = [urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
  556. // 实例化NSMutableURLRequest,并进行参数配置
  557. NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
  558. [request setURL:[NSURL URLWithString: urlString]];
  559. [request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
  560. [request setTimeoutInterval: 2];
  561. [request setHTTPShouldHandleCookies:FALSE];
  562. [request setHTTPMethod:@"GET"];
  563. NSError *error = nil;
  564. NSHTTPURLResponse *response;
  565. [NSURLConnection sendSynchronousRequest:request
  566. returningResponse:&response error:&error];
  567. // 处理返回的数据
  568. if (error) {
  569. NSDate *nowDate = [NSDate date];
  570. NSDateFormatter *format = [[NSDateFormatter alloc] init];
  571. [format setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  572. NSString *dateStr = [format stringFromDate:nowDate];
  573. return dateStr;
  574. }
  575. NSString *date = [[response allHeaderFields] objectForKey:@"Date"];
  576. date = [date substringFromIndex:5];//index到这个字符串的结尾
  577. date = [date substringToIndex:[date length]-4];//从索引0到给定的索引index
  578. NSDateFormatter *dMatter = [[NSDateFormatter alloc] init];
  579. dMatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
  580. [dMatter setDateFormat:@"dd MMM yyyy HH:mm:ss"];
  581. NSDate *netDate = [dMatter dateFromString:date];//时间差8小时
  582. NSTimeZone *zone = [NSTimeZone systemTimeZone];
  583. NSInteger interval = [zone secondsFromGMTForDate: netDate];
  584. netDate = [netDate dateByAddingTimeInterval: interval];
  585. NSDateFormatter *format1 = [[NSDateFormatter alloc] init];
  586. [format1 setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  587. NSString *dateStr = [format1 stringFromDate:netDate];
  588. return dateStr;
  589. }
  590. @end