Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
BiliDriveEx
提交
66df9e5c
B
BiliDriveEx
项目概览
OpenDocCN
/
BiliDriveEx
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
BiliDriveEx
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
66df9e5c
编写于
3月 20, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
delete jpg encoder
上级
b5799d12
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
0 addition
and
90 deletion
+0
-90
BiliDriveEx/jpg_encoder.py
BiliDriveEx/jpg_encoder.py
+0
-90
未找到文件。
BiliDriveEx/jpg_encoder.py
已删除
100644 → 0
浏览文件 @
b5799d12
# coding: utf-8
import
sys
import
struct
import
math
from
PIL
import
Image
from
io
import
BytesIO
class
JpgEncoder
:
def
__init__
(
self
):
self
.
minw
=
10
self
.
minh
=
10
self
.
dep
=
3
self
.
mode
=
'RGB'
@
staticmethod
def
extend_byte
(
bt
):
if
not
(
type
(
bt
)
is
int
and
0
<=
bt
<=
255
or
\
type
(
bt
)
is
bytes
and
len
(
bt
)
==
1
):
return
b
''
if
type
(
bt
)
is
bytes
:
bt
=
bt
[
0
]
res
=
bytes
([
bt
//
2
**
i
%
2
*
255
for
i
in
range
(
8
)])
return
res
@
staticmethod
def
recover_byte
(
bts
):
if
not
(
type
(
bts
)
is
bytes
and
len
(
bts
)
==
8
):
return
b
''
res
=
sum
([
b
//
128
*
2
**
i
for
i
,
b
in
enumerate
(
bts
)])
return
bytes
([
res
])
def
encode
(
self
,
data
):
minw
=
self
.
minw
minh
=
self
.
minh
dep
=
self
.
dep
mode
=
self
.
mode
data
=
struct
.
pack
(
'<I'
,
len
(
data
))
+
data
data
=
b
''
.
join
([
JpgEncoder
.
extend_byte
(
bt
)
for
bt
in
data
])
minsz
=
minw
*
minh
*
dep
if
len
(
data
)
<
minsz
:
data
+=
b
'
\0
'
*
(
minsz
-
len
(
data
))
side
=
math
.
ceil
(
math
.
sqrt
(
len
(
data
)
/
dep
))
total
=
side
*
side
*
dep
if
len
(
data
)
<
total
:
data
+=
b
'
\0
'
*
(
total
-
len
(
data
))
img
=
Image
.
frombytes
(
mode
,
(
side
,
side
),
data
)
bio
=
BytesIO
()
img
.
save
(
bio
,
'jpeg'
,
quality
=
100
,
subsampling
=
0
)
return
bio
.
getvalue
()
def
decode
(
self
,
data
):
img
=
Image
.
open
(
BytesIO
(
data
))
data
=
img
.
tobytes
()
data
=
b
''
.
join
([
JpgEncoder
.
recover_byte
(
data
[
i
:
i
+
8
])
for
i
in
range
(
0
,
len
(
data
),
8
)
])
sz
=
struct
.
unpack
(
'<I'
,
data
[:
4
])[
0
]
data
=
data
[
4
:
4
+
sz
]
return
data
def
main
():
op
=
sys
.
argv
[
1
]
if
op
not
in
[
'd'
,
'e'
]:
return
fname
=
sys
.
argv
[
2
]
data
=
open
(
fname
,
'rb'
).
read
()
encoder
=
JpgEncoder
()
if
op
==
'e'
:
data
=
encoder
.
encode
(
data
)
fname
=
fname
+
'.jpg'
else
:
data
=
encoder
.
decode
(
data
)
fname
=
fname
+
'.data'
with
open
(
fname
,
'wb'
)
as
f
:
f
.
write
(
data
)
if
__name__
==
'__main__'
:
main
()
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录