Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx-fluwx
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
openSourceLibrary
clx-fluwx
Commits
628ec4a2
提交
628ec4a2
authored
8月 21, 2018
作者:
JarvanMo
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ios 图片处理
上级
b1ea9551
显示空白字符变更
内嵌
并排
正在显示
14 个修改的文件
包含
488 行增加
和
113 行删除
+488
-113
FluwxShareHandler.kt
...main/kotlin/com/jarvan/fluwx/handler/FluwxShareHandler.kt
+4
-0
FluwxPlugin.h
ios/Classes/FluwxPlugin.h
+1
-0
FluwxPlugin.m
ios/Classes/FluwxPlugin.m
+15
-5
CallResults.m
ios/Classes/constants/CallResults.m
+2
-2
FluwxKeys.h
ios/Classes/constants/FluwxKeys.h
+6
-0
FluwxKeys.m
ios/Classes/constants/FluwxKeys.m
+5
-0
FluwxShareHandler.h
ios/Classes/handler/FluwxShareHandler.h
+2
-0
FluwxShareHandler.m
ios/Classes/handler/FluwxShareHandler.m
+130
-56
NSStringWrapper.h
ios/Classes/handler/NSStringWrapper.h
+64
-0
NSStringWrapper.m
ios/Classes/handler/NSStringWrapper.m
+158
-0
FlutterAssetHelper.h
ios/Classes/helper/FlutterAssetHelper.h
+0
-10
FlutterAssetHelper.m
ios/Classes/helper/FlutterAssetHelper.m
+0
-40
ThumbnailHelper.h
ios/Classes/helper/ThumbnailHelper.h
+11
-0
ThumbnailHelper.m
ios/Classes/helper/ThumbnailHelper.m
+90
-0
没有找到文件。
android/src/main/kotlin/com/jarvan/fluwx/handler/FluwxShareHandler.kt
浏览文件 @
628ec4a2
...
...
@@ -42,6 +42,10 @@ object FluwxShareHandler {
fun
registerApp
(
call
:
MethodCall
,
result
:
MethodChannel
.
Result
)
{
if
(!
call
.
argument
<
Boolean
>(
WechatPluginKeys
.
ANDROID
)){
result
.
success
(
mapOf
(
WechatPluginKeys
.
PLATFORM
to
WechatPluginKeys
.
ANDROID
,
WechatPluginKeys
.
RESULT
to
false
))
return
}
...
...
ios/Classes/FluwxPlugin.h
浏览文件 @
628ec4a2
#import <Flutter/Flutter.h>
#import "FluwxMethods.h"
#import "FluwxKeys.h"
@class
FluwxShareHandler
;
...
...
ios/Classes/FluwxPlugin.m
浏览文件 @
628ec4a2
...
...
@@ -3,7 +3,7 @@
#import "WXApi.h"
#import "StringUtil.h"
#import "../../../../../../ios/Classes/handler/FluwxShareHandler.h"
#import "ImageSchema.h"
@implementation
FluwxPlugin
...
...
@@ -31,6 +31,8 @@ BOOL isWeChatRegistered = NO;
}
-
(
void
)
handleMethodCall
:(
FlutterMethodCall
*
)
call
result
:(
FlutterResult
)
result
{
if
([
registerApp
isEqualToString
:
call
.
method
])
{
[
self
initWeChatIfNeeded
:
call
result
:
result
];
return
;
...
...
@@ -56,12 +58,18 @@ BOOL isWeChatRegistered = NO;
-
(
void
)
initWeChatIfNeeded
:(
FlutterMethodCall
*
)
call
result
:(
FlutterResult
)
result
{
if
(
!
call
.
arguments
[
fluwxKeyIOS
]){
result
(@{
fluwxKeyPlatform
:
fluwxKeyIOS
,
fluwxKeyResult
:
@NO
});
return
;
}
if
(
isWeChatRegistered
)
{
result
(
@
YES
);
result
(@
{
fluwxKeyPlatform
:
fluwxKeyIOS
,
fluwxKeyResult
:
@YES
}
);
return
;
}
NSString
*
appId
=
call
.
arguments
;
NSString
*
appId
=
call
.
arguments
[
appId
]
;
if
([
StringUtil
isBlank
:
appId
])
{
result
([
FlutterError
errorWithCode
:
@"invalid app id"
message
:
@"are you sure your app id is correct ? "
details
:
appId
]);
return
;
...
...
@@ -69,13 +77,15 @@ BOOL isWeChatRegistered = NO;
isWeChatRegistered
=
[
WXApi
registerApp
:
appId
];
result
(
@
YES
);
result
(@
{
fluwxKeyPlatform
:
fluwxKeyIOS
,
fluwxKeyResult
:
@
(
isWeChatRegistered
)}
);
}
-
(
void
)
unregisterApp
:(
FlutterMethodCall
*
)
call
result
:(
FlutterResult
)
result
{
[
WXApi
];
isWeChatRegistered
=
false
;
result
(
@YES
);
}
@end
ios/Classes/constants/CallResults.m
浏览文件 @
628ec4a2
...
...
@@ -5,8 +5,8 @@
#import "CallResults.h"
NSString
*
const
resultDone
=
@"done"
;
NSString
*
const
resultErrorNeedWeChat
=
@"
init wechat sdk please
"
;
NSString
*
const
resultMessageNeedWeChat
=
@"
init wechat sdk please
"
;
NSString
*
const
resultErrorNeedWeChat
=
@"
wxapi not configured
"
;
NSString
*
const
resultMessageNeedWeChat
=
@"
please config wxapi first
"
;
@implementation
CallResults
{
}
...
...
ios/Classes/constants/FluwxKeys.h
浏览文件 @
628ec4a2
...
...
@@ -23,5 +23,10 @@ extern NSString *const fluwxKeyMediaTagName;
extern
NSString
*
const
fluwxKeyMessageAction
;
extern
NSString
*
const
fluwxKeyPlatform
;
extern
NSString
*
const
fluwxKeyIOS
;
extern
NSString
*
const
fluwxKeyResult
;
@interface
FluwxKeys
:
NSObject
@end
\ No newline at end of file
ios/Classes/constants/FluwxKeys.m
浏览文件 @
628ec4a2
...
...
@@ -22,6 +22,11 @@ NSString *const fluwxKeyMessageExt =@"messageExt";
NSString
*
const
fluwxKeyMediaTagName
=
@"mediaTagName "
;
NSString
*
const
fluwxKeyMessageAction
=
@"messageAction"
;
NSString
*
const
fluwxKeyPlatform
=
@"platform"
;
NSString
*
const
fluwxKeyIOS
=
@"iOS"
;
NSString
*
const
fluwxKeyResult
=
@"result"
;
@implementation
FluwxKeys
{
}
...
...
ios/Classes/handler/FluwxShareHandler.h
浏览文件 @
628ec4a2
...
...
@@ -11,6 +11,8 @@
#import "FluwxMethods.h"
#import <Flutter/Flutter.h>
#import "FluwxPlugin.h"
#import "ThumbnailHelper.h"
#import "NSStringWrapper.h"
@class
StringUtil
;
@interface
FluwxShareHandler
:
NSObject
...
...
ios/Classes/handler/FluwxShareHandler.m
浏览文件 @
628ec4a2
...
...
@@ -9,6 +9,9 @@
@implementation
FluwxShareHandler
CGFloat
thumbnailWidth
;
NSObject
<
FlutterPluginRegistrar
>
*
_registrar
;
...
...
@@ -16,6 +19,7 @@ NSObject <FlutterPluginRegistrar> *_registrar;
self
=
[
super
init
];
if
(
self
)
{
_registrar
=
registrar
;
thumbnailWidth
=
150
;
}
return
self
;
...
...
@@ -55,17 +59,14 @@ NSObject <FlutterPluginRegistrar> *_registrar;
-
(
void
)
shareImage
:(
FlutterMethodCall
*
)
call
result
:(
FlutterResult
)
result
{
NSString
*
imagePath
=
call
.
arguments
[
fluwxKeyImage
];
if
([
imagePath
hasPrefix
:
SCHEMA_ASSETS
])
{
[
self
shareAssetImage
:
call
result
:
result
imagePath
:
imagePath
];
}
else
if
([
imagePath
hasPrefix
:
SCHEMA_FILE
])
{
}
else
{
[
self
shareNetworkImage
:
call
result
:
result
imagePath
:
imagePath
];
}
NSString
*
text
=
call
.
arguments
[
fluwxKeyText
];
NSString
*
scene
=
call
.
arguments
[
fluwxKeyScene
];
BOOL
done
=
[
WXApiRequestHandler
sendText
:
text
InScene
:[
StringToWeChatScene
toScene
:
scene
]];
result
(
@
(
done
));
}
...
...
@@ -87,24 +88,46 @@ NSObject <FlutterPluginRegistrar> *_registrar;
NSData
*
imageData
=
[
NSData
dataWithContentsOfURL
:
imageURL
];
NSData
*
thumbnailData
;
UIImage
*
thumbnailImage
;
UIImage
*
thumbnailImage
=
[
self
getThumbnail
:
thumbnail
size
:
32
*
1024
];
if
([
thumbnail
hasPrefix
:
SCHEMA_ASSETS
])
{
}
else
if
([
thumbnail
hasPrefix
:
SCHEMA_FILE
])
{
}
else
{
NSURL
*
thumbnailURL
=
[
NSURL
URLWithString
:
thumbnail
];
thumbnailData
=
[
NSData
dataWithContentsOfURL
:
thumbnailURL
];
if
([
thumbnailData
length
]
>
(
32
*
1024
))
{
dispatch_async
(
dispatch_get_main_queue
(),
^
{
}
else
{
thumbnailImage
=
[
UIImage
imageWithData
:
thumbnailData
];
}
NSString
*
scene
=
call
.
arguments
[
fluwxKeyScene
];
BOOL
done
=
[
WXApiRequestHandler
sendImageData
:
imageData
TagName
:
call
.
arguments
[
fluwxKeyMediaTagName
]
MessageExt:
fluwxKeyMessageExt
Action:
fluwxKeyMessageAction
ThumbImage:
thumbnailImage
InScene:
[
StringToWeChatScene
toScene
:
scene
]];
result
(@{
fluwxKeyPlatform
:
fluwxKeyIOS
,
fluwxKeyResult
:
@
(
done
)});
});
});
}
-
(
void
)
shareAssetImage
:(
FlutterMethodCall
*
)
call
result
:(
FlutterResult
)
result
imagePath
:(
NSString
*
)
imagePath
{
NSString
*
thumbnail
=
call
.
arguments
[
fluwxKeyThumbnail
];
if
([
StringUtil
isBlank
:
thumbnail
])
{
thumbnail
=
imagePath
;
}
dispatch_queue_t
globalQueue
=
dispatch_get_global_queue
(
0
,
0
);
dispatch_async
(
globalQueue
,
^
{
NSData
*
imageData
=
[
NSData
dataWithContentsOfFile
:[
self
readImageFromAssets
:
imagePath
]];
UIImage
*
thumbnailImage
=
[
self
getThumbnail
:
thumbnail
size
:
32
*
1024
];
dispatch_async
(
dispatch_get_main_queue
(),
^
{
NSString
*
scene
=
call
.
arguments
[
fluwxKeyScene
];
...
...
@@ -114,28 +137,50 @@ NSObject <FlutterPluginRegistrar> *_registrar;
Action:
fluwxKeyMessageAction
ThumbImage:
thumbnailImage
InScene:
[
StringToWeChatScene
toScene
:
scene
]];
result
(
@
(
done
)
);
result
(@
{
fluwxKeyPlatform
:
fluwxKeyIOS
,
fluwxKeyResult
:
@
(
done
)}
);
});
});
}
-
(
void
)
shareWebPage
:(
FlutterMethodCall
*
)
call
result
:(
FlutterResult
)
result
{
dispatch_queue_t
globalQueue
=
dispatch_get_global_queue
(
1
,
1
);
dispatch_async
(
globalQueue
,
^
{
NSString
*
thumbnail
=
call
.
arguments
[
fluwxKeyThumbnail
];
UIImage
*
thumbnailImage
=
[
self
getThumbnail
:
thumbnail
size
:
32
*
1024
];
NSData
*
imageData
=
[
NSData
dataWithContentsOfFile
:[
self
readImageFromAssets
:
@""
]];
dispatch_async
(
dispatch_get_main_queue
(),
^
{
NSString
*
webPageUrl
=
call
.
arguments
[
@"webPage"
];
NSString
*
scene
=
call
.
arguments
[
fluwxKeyScene
];
BOOL
done
=
[
WXApiRequestHandler
sendImageData
:
imageData
TagName
:
call
.
arguments
[
fluwxKeyMediaTagName
]
MessageExt:
fluwxKeyMessageExt
Action:
fluwxKeyMessageAction
ThumbImage:
thumbnailImage
InScene:
[
StringToWeChatScene
toScene
:
scene
]];
result
(@{
fluwxKeyPlatform
:
fluwxKeyIOS
,
fluwxKeyResult
:
@
(
done
)});
});
});
NSString
*
imagePath
=
call
.
arguments
[
fluwxKeyImage
];
if
([
imagePath
hasPrefix
:
SCHEMA_ASSETS
])
{
}
else
if
([
imagePath
hasPrefix
:
SCHEMA_FILE
])
{
}
else
{
[
self
shareNetworkImage
:
call
result
:
result
imagePath
:
imagePath
];
}
NSString
*
imagePath
=
call
.
arguments
[
fluwxKeyImage
];
NSString
*
text
=
call
.
arguments
[
fluwxKeyText
];
NSString
*
scene
=
call
.
arguments
[
fluwxKeyScene
];
...
...
@@ -144,43 +189,72 @@ NSObject <FlutterPluginRegistrar> *_registrar;
}
+
(
UIImage
*
)
compressImage
:(
UIImage
*
)
image
toByte
:(
NSUInteger
)
maxLength
{
// Compress by quality
CGFloat
compression
=
1
;
NSData
*
data
=
UIImageJPEGRepresentation
(
image
,
compression
);
if
(
data
.
length
<
maxLength
)
return
image
;
CGFloat
max
=
1
;
CGFloat
min
=
0
;
for
(
int
i
=
0
;
i
<
6
;
++
i
)
{
compression
=
(
max
+
min
)
/
2
;
data
=
UIImageJPEGRepresentation
(
image
,
compression
);
if
(
data
.
length
<
maxLength
*
0
.
9
)
{
min
=
compression
;
}
else
if
(
data
.
length
>
maxLength
)
{
max
=
compression
;
-
(
UIImage
*
)
getThumbnail
:(
NSString
*
)
thumbnail
size
:
(
NSUInteger
)
size
{
UIImage
*
thumbnailImage
=
nil
;
if
([
StringUtil
isBlank
:
thumbnail
])
{
return
nil
;
}
if
([
thumbnail
hasPrefix
:
SCHEMA_ASSETS
])
{
NSData
*
imageData2
=
[
NSData
dataWithContentsOfFile
:[
self
readImageFromAssets
:
thumbnail
]];
UIImage
*
tmp
=
[
UIImage
imageWithData
:
imageData2
];
thumbnailImage
=
[
ThumbnailHelper
compressImage
:
tmp
toByte
:
size
isPNG
:
FALSE
];
}
else
if
([
thumbnail
hasPrefix
:
SCHEMA_FILE
])
{
}
else
{
break
;
NSURL
*
thumbnailURL
=
[
NSURL
URLWithString
:
thumbnail
];
NSData
*
thumbnailData
=
[
NSData
dataWithContentsOfURL
:
thumbnailURL
];
UIImage
*
tmp
=
[
UIImage
imageWithData
:
thumbnailData
];
thumbnailImage
=
[
ThumbnailHelper
compressImage
:
tmp
toByte
:
size
isPNG
:
FALSE
];
}
return
thumbnailImage
;
}
-
(
NSString
*
)
readImageFromAssets
:
(
NSString
*
)
imagePath
{
NSArray
*
array
=
[
self
formatAssets
:
imagePath
];
NSString
*
key
;
if
(
array
[
1
]
==
nil
){
key
=
[
_registrar
lookupKeyForAsset
:
array
[
0
]];
}
else
{
key
=
[
_registrar
lookupKeyForAsset
:
array
[
0
]
fromPackage
:
array
[
1
]];
}
UIImage
*
resultImage
=
[
UIImage
imageWithData
:
data
];
if
(
data
.
length
<
maxLength
)
return
resultImage
;
// Compress by size
NSUInteger
lastDataLength
=
0
;
while
(
data
.
length
>
maxLength
&&
data
.
length
!=
lastDataLength
)
{
lastDataLength
=
data
.
length
;
CGFloat
ratio
=
(
CGFloat
)
maxLength
/
data
.
length
;
CGSize
size
=
CGSizeMake
((
NSUInteger
)(
resultImage
.
size
.
width
*
sqrtf
(
ratio
)),
(
NSUInteger
)(
resultImage
.
size
.
height
*
sqrtf
(
ratio
)));
// Use NSUInteger to prevent white blank
UIGraphicsBeginImageContext
(
size
);
[
resultImage
drawInRect
:
CGRectMake
(
0
,
0
,
size
.
width
,
size
.
height
)];
resultImage
=
UIGraphicsGetImageFromCurrentImageContext
();
UIGraphicsEndImageContext
();
data
=
UIImageJPEGRepresentation
(
resultImage
,
compression
);
return
[[
NSBundle
mainBundle
]
pathForResource
:
key
ofType
:
nil
];
}
-
(
NSArray
*
)
formatAssets
:
(
NSString
*
)
originPath
{
NSString
*
path
=
nil
;
NSString
*
packageName
=
nil
;
int
from
=
[
SCHEMA_ASSETS
length
];
int
to
=
[
originPath
length
];
NSString
*
pathWithoutSchema
=
[
originPath
substringFromIndex
:
from
toIndex
:
to
];
int
indexOfPackage
=
[
pathWithoutSchema
lastIndexOfString
:
fluwxKeyPackage
];
if
(
indexOfPackage
!=
JavaNotFound
){
path
=
[
pathWithoutSchema
substringFromIndex
:
0
toIndex
:
indexOfPackage
];
int
begin
=
indexOfPackage
+
[
fluwxKeyPackage
length
];
packageName
=
[
pathWithoutSchema
substringFromIndex
:
begin
toIndex
:[
pathWithoutSchema
length
]];
}
else
{
path
=
pathWithoutSchema
;
}
return
resultImage
;
return
@[
path
,
packageName
]
;
}
...
...
ios/Classes/handler/NSStringWrapper.h
0 → 100644
浏览文件 @
628ec4a2
//
// NSStringWrapper.h
// NSStringWrapper
//
// Created by Tang Qiao on 12-2-4.
// Copyright (c) 2012年 blog.devtang.com. All rights reserved.
//
#import <Foundation/Foundation.h>
#define JavaNotFound -1
@interface
NSString
(
Wrapper
)
/** Return the char value at the specified index. */
-
(
unichar
)
charAt
:(
int
)
index
;
/**
* Compares two strings lexicographically.
* the value 0 if the argument string is equal to this string;
* a value less than 0 if this string is lexicographically less than the string argument;
* and a value greater than 0 if this string is lexicographically greater than the string argument.
*/
-
(
int
)
compareTo
:(
NSString
*
)
anotherString
;
-
(
int
)
compareToIgnoreCase
:(
NSString
*
)
str
;
-
(
BOOL
)
contains
:(
NSString
*
)
str
;
-
(
BOOL
)
startsWith
:(
NSString
*
)
prefix
;
-
(
BOOL
)
endsWith
:(
NSString
*
)
suffix
;
-
(
BOOL
)
equals
:(
NSString
*
)
anotherString
;
-
(
BOOL
)
equalsIgnoreCase
:(
NSString
*
)
anotherString
;
-
(
int
)
indexOfChar
:(
unichar
)
ch
;
-
(
int
)
indexOfChar
:(
unichar
)
ch
fromIndex
:(
int
)
index
;
-
(
int
)
indexOfString
:(
NSString
*
)
str
;
-
(
int
)
indexOfString
:(
NSString
*
)
str
fromIndex
:(
int
)
index
;
-
(
int
)
lastIndexOfChar
:(
unichar
)
ch
;
-
(
int
)
lastIndexOfChar
:(
unichar
)
ch
fromIndex
:(
int
)
index
;
-
(
int
)
lastIndexOfString
:(
NSString
*
)
str
;
-
(
int
)
lastIndexOfString
:(
NSString
*
)
str
fromIndex
:(
int
)
index
;
-
(
NSString
*
)
substringFromIndex
:(
int
)
beginIndex
toIndex
:(
int
)
endIndex
;
-
(
NSString
*
)
toLowerCase
;
-
(
NSString
*
)
toUpperCase
;
-
(
NSString
*
)
trim
;
-
(
NSString
*
)
replaceAll
:(
NSString
*
)
origin
with
:(
NSString
*
)
replacement
;
-
(
NSArray
*
)
split
:(
NSString
*
)
separator
;
@end
ios/Classes/handler/NSStringWrapper.m
0 → 100644
浏览文件 @
628ec4a2
//
// NSStringWrapper.m
// NSStringWrapper
//
// Created by Tang Qiao on 12-2-4.
// Copyright (c) 2012年 blog.devtang.com. All rights reserved.
//
#import "NSStringWrapper.h"
@implementation
NSString
(
Wrapper
)
/** Java-like method. Returns the char value at the specified index. */
-
(
unichar
)
charAt
:(
int
)
index
{
return
[
self
characterAtIndex
:
index
];
}
/**
* Java-like method. Compares two strings lexicographically.
* the value 0 if the argument string is equal to this string;
* a value less than 0 if this string is lexicographically less than the string argument;
* and a value greater than 0 if this string is lexicographically greater than the string argument.
*/
-
(
int
)
compareTo
:(
NSString
*
)
anotherString
{
return
[
self
compare
:
anotherString
];
}
/** Java-like method. Compares two strings lexicographically, ignoring case differences. */
-
(
int
)
compareToIgnoreCase
:
(
NSString
*
)
str
{
return
[
self
compare
:
str
options
:
NSCaseInsensitiveSearch
];
}
/** Java-like method. Returns true if and only if this string contains the specified sequence of char values. */
-
(
BOOL
)
contains
:
(
NSString
*
)
str
{
NSRange
range
=
[
self
rangeOfString
:
str
];
return
(
range
.
location
!=
NSNotFound
);
}
-
(
BOOL
)
startsWith
:
(
NSString
*
)
prefix
{
return
[
self
hasPrefix
:
prefix
];
}
-
(
BOOL
)
endsWith
:
(
NSString
*
)
suffix
{
return
[
self
hasSuffix
:
suffix
];
}
-
(
BOOL
)
equals
:
(
NSString
*
)
anotherString
{
return
[
self
isEqualToString
:
anotherString
];
}
-
(
BOOL
)
equalsIgnoreCase
:
(
NSString
*
)
anotherString
{
return
[[
self
toLowerCase
]
equals
:[
anotherString
toLowerCase
]];
}
-
(
int
)
indexOfChar
:
(
unichar
)
ch
{
return
[
self
indexOfChar
:
ch
fromIndex
:
0
];
}
-
(
int
)
indexOfChar
:
(
unichar
)
ch
fromIndex
:
(
int
)
index
{
int
len
=
self
.
length
;
for
(
int
i
=
index
;
i
<
len
;
++
i
)
{
if
(
ch
==
[
self
charAt
:
i
])
{
return
i
;
}
}
return
JavaNotFound
;
}
-
(
int
)
indexOfString
:
(
NSString
*
)
str
{
NSRange
range
=
[
self
rangeOfString
:
str
];
if
(
range
.
location
==
NSNotFound
)
{
return
JavaNotFound
;
}
return
range
.
location
;
}
-
(
int
)
indexOfString
:
(
NSString
*
)
str
fromIndex
:
(
int
)
index
{
NSRange
fromRange
=
NSMakeRange
(
index
,
self
.
length
-
index
);
NSRange
range
=
[
self
rangeOfString
:
str
options
:
NSLiteralSearch
range
:
fromRange
];
if
(
range
.
location
==
NSNotFound
)
{
return
JavaNotFound
;
}
return
range
.
location
;
}
-
(
int
)
lastIndexOfChar
:
(
unichar
)
ch
{
int
len
=
self
.
length
;
for
(
int
i
=
len
-
1
;
i
>=
0
;
--
i
)
{
if
([
self
charAt
:
i
]
==
ch
)
{
return
i
;
}
}
return
JavaNotFound
;
}
-
(
int
)
lastIndexOfChar
:
(
unichar
)
ch
fromIndex
:
(
int
)
index
{
int
len
=
self
.
length
;
if
(
index
>=
len
)
{
index
=
len
-
1
;
}
for
(
int
i
=
index
;
i
>=
0
;
--
i
)
{
if
([
self
charAt
:
i
]
==
ch
)
{
return
index
;
}
}
return
JavaNotFound
;
}
-
(
int
)
lastIndexOfString
:
(
NSString
*
)
str
{
NSRange
range
=
[
self
rangeOfString
:
str
options
:
NSBackwardsSearch
];
if
(
range
.
location
==
NSNotFound
)
{
return
JavaNotFound
;
}
return
range
.
location
;
}
-
(
int
)
lastIndexOfString
:
(
NSString
*
)
str
fromIndex
:
(
int
)
index
{
NSRange
fromRange
=
NSMakeRange
(
0
,
index
);
NSRange
range
=
[
self
rangeOfString
:
str
options
:
NSBackwardsSearch
range
:
fromRange
];
if
(
range
.
location
==
NSNotFound
)
{
return
JavaNotFound
;
}
return
range
.
location
;
}
-
(
NSString
*
)
substringFromIndex
:
(
int
)
beginIndex
toIndex
:
(
int
)
endIndex
{
if
(
endIndex
<=
beginIndex
)
{
return
@""
;
}
NSRange
range
=
NSMakeRange
(
beginIndex
,
endIndex
-
beginIndex
);
return
[
self
substringWithRange
:
range
];
}
-
(
NSString
*
)
toLowerCase
{
return
[
self
lowercaseString
];
}
-
(
NSString
*
)
toUpperCase
{
return
[
self
uppercaseString
];
}
-
(
NSString
*
)
trim
{
return
[
self
stringByTrimmingCharactersInSet
:[
NSCharacterSet
whitespaceAndNewlineCharacterSet
]];
}
-
(
NSString
*
)
replaceAll
:
(
NSString
*
)
origin
with
:
(
NSString
*
)
replacement
{
return
[
self
stringByReplacingOccurrencesOfString
:
origin
withString
:
replacement
];
}
-
(
NSArray
*
)
split
:
(
NSString
*
)
separator
{
return
[
self
componentsSeparatedByString
:
separator
];
}
@end
\ No newline at end of file
ios/Classes/helper/FlutterAssetHelper.h
deleted
100644 → 0
浏览文件 @
b1ea9551
//
// Created by mo on 2018/8/16.
//
#import <Foundation/Foundation.h>
#import "ImageSchema.h"
#import "FluwxKeys.h"
@interface
FlutterAssetHelper
:
NSObject
@end
\ No newline at end of file
ios/Classes/helper/FlutterAssetHelper.m
deleted
100644 → 0
浏览文件 @
b1ea9551
//
// Created by mo on 2018/8/16.
//
#import "FlutterAssetHelper.h"
@implementation
FlutterAssetHelper
+
(
NSString
*
)
getPackageName
:(
NSString
*
)
assetPath
{
NSUInteger
length
=
SCHEMA_ASSETS
.
length
;
return
@""
;
}
+
(
NSString
*
)
getPath
:(
NSString
*
)
assetPath
{
NSUInteger
schemaLength
=
SCHEMA_ASSETS
.
length
;
NSUInteger
totalLength
=
assetPath
.
length
;
NSRange
range
=
NSMakeRange
(
schemaLength
,
totalLength
-
schemaLength
);
NSString
*
result
=
[
assetPath
substringWithRange
:
range
];
if
([
result
rangeOfString
:
fluwxKeyPackage
].
location
!=
NSNotFound
)
{
// result = [result stringByReplacingCharactersInRange:<#(NSRange)range#> withString:<#(NSString *)replacement#>]
}
return
result
;
}
@end
\ No newline at end of file
ios/Classes/helper/ThumbnailHelper.h
0 → 100644
浏览文件 @
628ec4a2
//
// Created by mo on 2018/8/21.
//
#import <Foundation/Foundation.h>
@interface
ThumbnailHelper
:
NSObject
+
(
UIImage
*
)
compressImage
:(
UIImage
*
)
image
toByte
:(
NSUInteger
)
maxLength
isPNG
:(
BOOL
)
isPNG
;
@end
\ No newline at end of file
ios/Classes/helper/ThumbnailHelper.m
0 → 100644
浏览文件 @
628ec4a2
//
// Created by mo on 2018/8/21.
//
#import "ThumbnailHelper.h"
@implementation
ThumbnailHelper
+
(
UIImage
*
)
compressImage
:(
UIImage
*
)
image
toByte
:(
NSUInteger
)
maxLength
isPNG
:(
BOOL
)
isPNG
{
// Compress by quality
CGFloat
compression
=
1
;
NSData
*
data
=
UIImageJPEGRepresentation
(
image
,
compression
);
if
(
data
.
length
<
maxLength
)
return
image
;
CGFloat
max
=
1
;
CGFloat
min
=
0
;
for
(
int
i
=
0
;
i
<
6
;
++
i
)
{
compression
=
(
max
+
min
)
/
2
;
data
=
UIImageJPEGRepresentation
(
image
,
compression
);
if
(
data
.
length
<
maxLength
*
0
.
9
)
{
min
=
compression
;
}
else
if
(
data
.
length
>
maxLength
)
{
max
=
compression
;
}
else
{
break
;
}
}
UIImage
*
resultImage
;
if
(
isPNG
){
NSData
*
tmp
=
UIImagePNGRepresentation
([
UIImage
imageWithData
:
data
]);
resultImage
=
[
UIImage
imageWithData
:
tmp
];
}
else
{
resultImage
=
[
UIImage
imageWithData
:
data
];
}
if
(
data
.
length
<
maxLength
)
return
resultImage
;
// Compress by size
NSUInteger
lastDataLength
=
0
;
while
(
data
.
length
>
maxLength
&&
data
.
length
!=
lastDataLength
)
{
lastDataLength
=
data
.
length
;
CGFloat
ratio
=
(
CGFloat
)
maxLength
/
data
.
length
;
CGSize
size
=
CGSizeMake
((
NSUInteger
)(
resultImage
.
size
.
width
*
sqrtf
(
ratio
)),
(
NSUInteger
)(
resultImage
.
size
.
height
*
sqrtf
(
ratio
)));
// Use NSUInteger to prevent white blank
UIGraphicsBeginImageContext
(
size
);
[
resultImage
drawInRect
:
CGRectMake
(
0
,
0
,
size
.
width
,
size
.
height
)];
resultImage
=
UIGraphicsGetImageFromCurrentImageContext
();
UIGraphicsEndImageContext
();
data
=
UIImageJPEGRepresentation
(
resultImage
,
compression
);
}
return
resultImage
;
}
-
(
UIImage
*
)
scaleFromImage
:
(
UIImage
*
)
image
width
:
(
CGSize
)
newSize
{
CGSize
imageSize
=
image
.
size
;
CGFloat
width
=
imageSize
.
width
;
CGFloat
height
=
imageSize
.
height
;
if
(
width
<=
newSize
.
width
&&
height
<=
newSize
.
height
){
return
image
;
}
if
(
width
==
0
||
height
==
0
){
return
image
;
}
CGFloat
widthFactor
=
newSize
.
width
/
width
;
CGFloat
heightFactor
=
newSize
.
height
/
height
;
CGFloat
scaleFactor
=
(
widthFactor
<
heightFactor
?
widthFactor
:
heightFactor
);
CGFloat
scaledWidth
=
width
*
scaleFactor
;
CGFloat
scaledHeight
=
height
*
scaleFactor
;
CGSize
targetSize
=
CGSizeMake
(
scaledWidth
,
scaledHeight
);
UIGraphicsBeginImageContext
(
targetSize
);
[
image
drawInRect
:
CGRectMake
(
0
,
0
,
scaledWidth
,
scaledHeight
)];
UIImage
*
newImage
=
UIGraphicsGetImageFromCurrentImageContext
();
UIGraphicsEndImageContext
();
return
newImage
;
}
@end
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论