WangBooth's Logbook

王布斯的网络日志

0%

照片备份的方法

图|经 PIL 处理后的照片

手机里的照片和视频越来越多,已经有几十 GB 了,需要把内容备份出来。

但是备份到自己电脑上吧,也不太合适,本身电脑的硬盘也不够大;单独买个移动硬盘是可行的,只要硬盘不坏不丢就好。

网盘目前还是能用的,可以把手机里的内容上传到网盘上来做备份。网盘有个最大的顾虑,就是安全问题,万一泄漏了网盘密码就不好了。

所以,上传到网盘上的内容,我想先加密下,再传到网盘上,这样即使网盘的密码泄漏了,还有文件的密码可以保护一下的。

生成缩略图

为了更快地从网盘上找到想要的加密图片,我把图片压缩到很小,只能看到个图片轮廓,通过缩略图来确认自己想看的最终原图:

thumbnail.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from PIL import Image
import getopt, sys
import os
import cv2

img_type_list = ["jpg", "jpeg", "bmp", "gif", "tiff", "png", "raw", "psd"]
vedio_type_list = ["mp4", "mpeg", "mpg", "avi", "mov", "wmv", "mkv", "rmvb", "flv"]

def video2pic(video, img):
print("video2pic: {} to {}".format(video, img))
cap = cv2.VideoCapture(video)
# cap.set(1, int(cap.get(7)/2))
cap.set(1,2)
rval, frame = cap.read()
if rval:
cv2.imwrite(img, frame)
cap.release()

def thumbnail(in_file,out_file,size):
print("thumbnail: {} to {}, size: {}".format(in_file, out_file, str(size)))
im = Image.open(in_file)
im.thumbnail(size)
im.save(out_file)

def usage():
pass

def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "ht:i:o:s:", ["help", "in=", "out=", "size="])
except getopt.GetoptError as err:
print(str(err))
usage()
sys.exit(2)

_in = None
_out = None
_size = 96

for o, a in opts:
if o in ("-h", "--help"):
usage()
sys.exit()
elif o in ("-i", "--in"):
_in = a
elif o in ("-o", "--out"):
_out = a
elif o in ("-s", "--size"):
_size = int(a)
else:
assert False, "unhandled option"

if (None == _in) or (not os.path.exists(_in)):
print("in is not exists")
sys.exit(2)
if (None == _out):
print("out is not exists")
sys.exit(2)
if not os.path.exists(_out):
print("mkdir out dir")
os.mkdir(_out)

size = (_size, _size)


if os.path.isdir(_in):
files = os.listdir(_in)
for f in files:
src_file_path = _in+"/"+f

if os.path.isfile(src_file_path):
file_type = src_file_path.split(".")[-1].lower()
if src_file_path.split(".")[-1].lower() in vedio_type_list:
thumbnail_file_path = _out+"/"+f+".jpg"
video2pic(src_file_path, thumbnail_file_path)
thumbnail(thumbnail_file_path, thumbnail_file_path, size)
elif src_file_path.split(".")[-1].lower() in img_type_list:
thumbnail_file_path = _out+"/"+f
thumbnail(src_file_path, thumbnail_file_path, size)
else:
print("not img or vedio file: " + src_file_path)

else:
print("in need be a dir.")

if __name__ == "__main__":
main()

文件加密

encrypt.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh
# $1 is src dir
# $2 is the passwd

mkdir -p $1"/encrypt"

for i in `ls $1|grep -v encrypt`;
do
echo $i;
tar -zcf - $1"/"$i |openssl des3 -salt -k $2 |dd of=$1"/encrypt/"$i".tgz.des3";
echo $i.tgz.des3;
done

for i in `ls $1|grep -v encrypt`;
do
a=`md5 $i`;
echo $a
echo $a >> $1"/encrypt/md5.txt";
b=`md5 $1"/encrypt/$i.tgz.des3"`;
echo $b
echo $b >> $1"/encrypt/md5.txt";
done

文件解密

decrypt.sh

1
2
3
4
5
6
7
#!/bin/sh
# $1 is src file
# $2 is the passwd

echo $1

dd if=$1 |openssl des3 -d -k $2 |tar zxf -

目录结构