最近在使用django做图片上传的时候,发现一个问题就是,有些在别处下载过来的图片,如果不修改名称就使用的话,导致的结果就是,有时候直接输出会出现显示不了图片的情况,经过检查才发现,是因为图片的名称有特殊字符,导致输出失败,于是决定一下图片的命名方式;

下面是是我对图片进行截切的函数代码;

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
def upload_large_image_file(file, type='man'):
'''文件上传函数,上传的文件夹一定要存在'''
if file:
size = 480
#先移动文件,然后截取指定大小尺寸的文件
parser = ImageFile.Parser()
for content in file.chunks():
parser.feed(content)
img = parser.close()

width, height = img.size
if width > size:
delta = width / size
height = int(height / delta)
img.thumbnail((size, height), Image.ANTIALIAS)


name, ext = os.path.splitext(os.path.basename(file.name))
name = uuid.uuid4().hex
file_name = os.path.join('upload/'+type+'/large',name+'_large'+ext)
path_name = os.path.join(MEDIA_ROOT, file_name)
img.save(path_name)

return(file_name)
return(file_name)


def upload_middle_image_file(file, type='man'):
'''文件上传函数,上传的文件夹一定要存在'''
if file:
size = 320
#先移动文件,然后截取指定大小尺寸的文件
parser = ImageFile.Parser()
for content in file.chunks():
parser.feed(content)
img = parser.close()

width, height = img.size
if width > size:
delta = width / size
height = int(height / delta)
img.thumbnail((size, height), Image.ANTIALIAS)


name, ext = os.path.splitext(os.path.basename(file.name))
name = uuid.uuid4().hex
file_name = os.path.join('upload/'+type+'/middle',name+'_middle'+ext)
path_name = os.path.join(MEDIA_ROOT, file_name)
img.save(path_name)

return(file_name)
return(file_name)


def upload_small_image_file(file,type='man'):
'''文件上传函数,上传的文件夹一定要存在'''
if file:
size = 100
#先移动文件,然后截取指定大小尺寸的文件
parser = ImageFile.Parser()
for content in file.chunks():
parser.feed(content)
img = parser.close()

width, height = img.size
if width > size:
delta = width / size
height = int(height / delta)
img.thumbnail((size, height), Image.ANTIALIAS)


name, ext = os.path.splitext(os.path.basename(file.name))
name = uuid.uuid4().hex
file_name = os.path.join('upload/'+type+'/small',name+'_small'+ext)
path_name = os.path.join(MEDIA_ROOT, file_name)
img.save(path_name)

return(file_name)
return(file_name)