// // NSURL+ImageSize.m // MEISHI // // Created by CY on 2021/2/26. // Copyright © 2021 leo. All rights reserved. // #import "NSURL+ImageSize.h" static NSString *const XOSSPROCESS = @"x-oss-process"; @implementation NSURL (ImageSize) - (NSURL *)urlWithImageScale:(NSInteger)scale{ NSDictionary *params = [self getParamsWithUrlString:self.absoluteString]; if (params == nil) { NSString *appendStr = [NSString stringWithFormat:@"?%@=image/quality,q_%ld",XOSSPROCESS,scale]; NSString *str = [NSString stringWithFormat:@"%@%@",self.absoluteString,appendStr]; return [NSURL URLWithString:str]; }else{ if ([params.allKeys containsObject:XOSSPROCESS]) { return self; }else{ NSString *appendStr = [NSString stringWithFormat:@"&%@=image/quality,q_%ld",XOSSPROCESS,scale]; NSString *str = [NSString stringWithFormat:@"%@%@",self.absoluteString,appendStr]; return [NSURL URLWithString:str]; } } } - (NSURL *)urlWithImageResize:(NSInteger)scale{ // ?x-oss-process=image/crop,x_100,y_50 NSString *const process= @"x-oss-process"; NSDictionary *params = [self getParamsWithUrlString:self.absoluteString]; if (params == nil) { NSString *appendStr = [NSString stringWithFormat:@"?%@=image/resize,w_%zd",process,scale]; NSString *str = [NSString stringWithFormat:@"%@%@",self.absoluteString,appendStr]; return [NSURL URLWithString:str]; }else{ if ([params.allKeys containsObject:process]) { return self; }else{ NSString *appendStr = [NSString stringWithFormat:@"?%@=image/resize,w_%zd",process,scale]; NSString *str = [NSString stringWithFormat:@"%@%@",self.absoluteString,appendStr]; return [NSURL URLWithString:str]; } } } - (NSDictionary *)getParamsWithUrlString:(NSString*)urlString { if(urlString.length==0) { return nil; } //先截取问号 NSArray* allElements = [urlString componentsSeparatedByString:@"?"]; NSMutableDictionary* params = [NSMutableDictionary dictionary];//待set的参数字典 if(allElements.count == 2) { //有参数或者?后面为空 NSString* paramsString = allElements[1]; //获取参数对 NSArray*paramsArray = [paramsString componentsSeparatedByString:@"&"]; if(paramsArray.count>=2) { for(NSInteger i =0; i < paramsArray.count; i++) { NSString* singleParamString = paramsArray[i]; NSArray* singleParamSet = [singleParamString componentsSeparatedByString:@"="]; if(singleParamSet.count==2) { NSString* key = singleParamSet[0]; NSString* value = singleParamSet[1]; if(key.length>0|| value.length>0) { [params setObject: value.length>0? value:@"" forKey:key.length>0?key:@""]; } } } }else if(paramsArray.count == 1) {//无 &。url只有?后一个参数 NSString* singleParamString = paramsArray[0]; NSArray* singleParamSet = [singleParamString componentsSeparatedByString:@"="]; if(singleParamSet.count==2) { NSString* key = singleParamSet[0]; NSString* value = singleParamSet[1]; if(key.length>0 || value.length>0) { [params setObject:value.length>0?value:@""forKey:key.length>0?key:@""]; } }else{ //问号后面啥也没有 xxxx? 无需处理 } } //整合url及参数 return params; }else if(allElements.count>2) { return nil; }else{ return nil; } } @end