Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx-fluwx
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
openSourceLibrary
clx-fluwx
Commits
518f31b7
Unverified
提交
518f31b7
authored
4月 14, 2022
作者:
JarvanMo
提交者:
GitHub
4月 14, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #475 from 9527001/feat-compress_ios
分享小程序,data数据压缩成功,但是image转data 导致图片大小变大
上级
dc5be0ea
44576110
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
68 行增加
和
8 行删除
+68
-8
FluwxShareHandler.m
ios/Classes/FluwxShareHandler.m
+15
-8
ThumbnailHelper.h
ios/Classes/ThumbnailHelper.h
+6
-0
ThumbnailHelper.m
ios/Classes/ThumbnailHelper.m
+47
-0
没有找到文件。
ios/Classes/FluwxShareHandler.m
浏览文件 @
518f31b7
...
@@ -235,16 +235,15 @@ NSObject <FlutterPluginRegistrar> *_fluwxRegistrar;
...
@@ -235,16 +235,15 @@ NSObject <FlutterPluginRegistrar> *_fluwxRegistrar;
NSDictionary
*
hdImagePath
=
call
.
arguments
[
@"hdImagePath"
];
NSDictionary
*
hdImagePath
=
call
.
arguments
[
@"hdImagePath"
];
if
(
hdImagePath
!=
(
id
)
[
NSNull
null
])
{
if
(
hdImagePath
!=
(
id
)
[
NSNull
null
])
{
NSData
*
imageData
=
[
self
getNsDataFromWeChatFile
:
hdImagePath
];
NSData
*
imageData
=
[
self
getNsDataFromWeChatFile
:
hdImagePath
];
NSString
*
suffix
=
hdImagePath
[
@"suffix"
];
BOOL
isPNG
=
[
self
isPNG
:
suffix
];
BOOL
compress
=
call
.
arguments
[
fluwxKeyCompressThumbnail
];
BOOL
compress
=
call
.
arguments
[
fluwxKeyCompressThumbnail
];
UIImage
*
uiImage
=
[
self
getThumbnailFromNSData
:
imageData
size
:
120
*
1024
isPNG
:
isPNG
compress
:
compress
];
hdImageData
=
[
self
getThumbnailDataFromNSData
:
imageData
size
:
120
*
1024
compress
:
compress
];
if
(
isPNG
)
{
// UIImage *uiImage = [self getThumbnailFromNSData:imageData size:120 * 1024 isPNG:isPNG compress:compress];
hdImageData
=
UIImagePNGRepresentation
(
uiImage
);
// if (isPNG) {
}
else
{
// hdImageData = UIImagePNGRepresentation(uiImage);
hdImageData
=
UIImageJPEGRepresentation
(
uiImage
,
1
);
// } else {
}
// hdImageData = UIImageJPEGRepresentation(uiImage, 1);
// }
}
}
dispatch_async
(
dispatch_get_main_queue
(),
^
{
dispatch_async
(
dispatch_get_main_queue
(),
^
{
...
@@ -332,6 +331,14 @@ NSObject <FlutterPluginRegistrar> *_fluwxRegistrar;
...
@@ -332,6 +331,14 @@ NSObject <FlutterPluginRegistrar> *_fluwxRegistrar;
return
uiImage
;
return
uiImage
;
}
}
-
(
NSData
*
)
getThumbnailDataFromNSData
:(
NSData
*
)
data
size
:(
NSUInteger
)
size
compress
:(
BOOL
)
compress
{
if
(
compress
)
{
return
[
ThumbnailHelper
compressImageData
:
data
toByte
:
size
];
}
else
{
return
data
;
}
}
-
(
NSString
*
)
readFileFromAssets
:(
NSString
*
)
imagePath
{
-
(
NSString
*
)
readFileFromAssets
:(
NSString
*
)
imagePath
{
NSArray
*
array
=
[
self
formatAssets
:
imagePath
];
NSArray
*
array
=
[
self
formatAssets
:
imagePath
];
NSString
*
key
;
NSString
*
key
;
...
...
ios/Classes/ThumbnailHelper.h
浏览文件 @
518f31b7
...
@@ -7,4 +7,10 @@
...
@@ -7,4 +7,10 @@
@interface
ThumbnailHelper
:
NSObject
@interface
ThumbnailHelper
:
NSObject
+
(
UIImage
*
)
compressImage
:(
UIImage
*
)
image
toByte
:(
NSUInteger
)
maxLength
isPNG
:(
BOOL
)
isPNG
;
+
(
UIImage
*
)
compressImage
:(
UIImage
*
)
image
toByte
:(
NSUInteger
)
maxLength
isPNG
:(
BOOL
)
isPNG
;
/// NSData 压缩后转NSData
/// @param imageData 来源data
/// @param maxLength 压缩目标值,压缩结果在maxLength的0.9~1之间
+
(
NSData
*
)
compressImageData
:(
NSData
*
)
imageData
toByte
:(
NSUInteger
)
maxLength
;
@end
@end
ios/Classes/ThumbnailHelper.m
浏览文件 @
518f31b7
...
@@ -7,6 +7,53 @@
...
@@ -7,6 +7,53 @@
@implementation
ThumbnailHelper
@implementation
ThumbnailHelper
+
(
NSData
*
)
compressImageData
:(
NSData
*
)
imageData
toByte
:(
NSUInteger
)
maxLength
{
// Compress by quality
CGFloat
compression
=
1
;
NSData
*
data
=
imageData
;
NSLog
(
@"压缩前 %lu %lu "
,(
unsigned
long
)
data
.
length
,
maxLength
);
if
(
data
.
length
<
maxLength
)
return
data
;
UIImage
*
image
=
[
UIImage
imageWithData
:
imageData
];
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
;
}
}
NSLog
(
@"压缩第一次 %lu %lu "
,(
unsigned
long
)
data
.
length
,
maxLength
);
if
(
data
.
length
<
maxLength
)
return
data
;
UIImage
*
resultImage
;
resultImage
=
[
UIImage
imageWithData
:
data
];
// 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
);
}
NSLog
(
@"压缩第二次%lu %lu "
,(
unsigned
long
)
data
.
length
,
maxLength
);
return
data
;
}
+
(
UIImage
*
)
compressImage
:(
UIImage
*
)
image
toByte
:(
NSUInteger
)
maxLength
isPNG
:(
BOOL
)
isPNG
{
+
(
UIImage
*
)
compressImage
:(
UIImage
*
)
image
toByte
:(
NSUInteger
)
maxLength
isPNG
:(
BOOL
)
isPNG
{
// Compress by quality
// Compress by quality
CGFloat
compression
=
1
;
CGFloat
compression
=
1
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论