:art: Support pngquant

huangqimin001 1 年之前
父節點
當前提交
899ea80e16
共有 4 個文件被更改,包括 21 次插入8 次删除
  1. 4 2
      kodo/oauth_settings.py
  2. 3 0
      kodo/settings.py
  3. 1 0
      requirements.txt
  4. 13 6
      utils/qiniucdn.py

+ 4 - 2
kodo/oauth_settings.py

@@ -240,9 +240,11 @@ def DJANGO_FILE_UPLOAD_STORAGE_FUNC(request, file_path=None):
240 240
 def DJANGO_FILE_UPLOAD_CALLBACK_FUNC(request, file_path=None, file_url=None):
241 241
     """ DJANGO FILE UPLOAD Callback Func """
242 242
     import os
243
+
243 244
     from logs.models import MchLogInfo
244 245
     file_type = request.POST.get('file_type', '')
245 246
     upload_qiniu = request.POST.get('upload_qiniu', '')
247
+    compress = bool(request.POST.get('compress', 0))
246 248
 
247 249
     if file_type == 'logfile':
248 250
         optor_id = request.POST.get('optor_id', '')
@@ -259,7 +261,7 @@ def DJANGO_FILE_UPLOAD_CALLBACK_FUNC(request, file_path=None, file_url=None):
259 261
         height = request.POST.get('height', 0)
260 262
         file = request.FILES.get('file', '')
261 263
         # upload_file_path('media/' + file_path, file_path, bucket='tamron')
262
-        upload_file_req(file, file_path, bucket='tamron')
264
+        upload_file_req(file, file_path, bucket='tamron', compress=compress)
263 265
         file_url = qiniu_file_url(file_path, bucket='tamron')
264 266
 
265 267
         return {
@@ -271,7 +273,7 @@ def DJANGO_FILE_UPLOAD_CALLBACK_FUNC(request, file_path=None, file_url=None):
271 273
     elif file_type == 'member_activity' or (file_type and upload_qiniu):
272 274
         file = request.FILES.get('file', '')
273 275
         # upload_file_path('media/' + file_path, file_path, bucket='tamron')
274
-        upload_file_req(file, file_path, bucket='tamron')
276
+        upload_file_req(file, file_path, bucket='tamron', compress=compress)
275 277
         file_url = qiniu_file_url(file_path, bucket='tamron')
276 278
 
277 279
         return {

+ 3 - 0
kodo/settings.py

@@ -270,6 +270,9 @@ QINIU_FILE_URL_AFTER = 'http://img.tamron.kodo.com.cn'  # QINIU_FILE_URL_HTTPS F
270 270
 FILE_UPLOAD_MAX_MEMORY_SIZE = 5242880  # InMemoryUploadedFile 文件最大值
271 271
 FILE_UPLOAD_PERMISSIONS = 0o644  # TemporaryUploadedFile 文件权限设置
272 272
 
273
+# 图片压缩设置
274
+PNG_QUANT_FILE = '/home/paiai/work/pngquant-2.7.2/pngquant'
275
+
273 276
 # 唯一标识设置
274 277
 CURTAIL_UUID_LENGTH = 7  # Used in django-curtail-uuid==1.0.0
275 278
 

+ 1 - 0
requirements.txt

@@ -8,6 +8,7 @@ jsonfield==3.1.0
8 8
 mock==4.0.3
9 9
 monetary==1.0.3
10 10
 mysqlclient==2.1.1
11
+pngquant==1.0.7
11 12
 pysnippets==1.1.4
12 13
 pyzbar==0.1.9
13 14
 qiniu==7.9.0

+ 13 - 6
utils/qiniucdn.py

@@ -1,39 +1,46 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3
+import pngquant
3 4
 import qiniu
4 5
 from django.conf import settings
5 6
 
6 7
 
7 8
 QINIU = settings.QINIU
8 9
 auth = qiniu.Auth(QINIU['access_key'], QINIU['secret_key'])
10
+pngquant.config(settings.PNG_QUANT_FILE)
9 11
 
10 12
 
11
-def upload(data, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default']):
13
+def upload(data, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True):
12 14
     if not data:
13 15
         return ''
16
+    if compress:
17
+        try:
18
+            data = pngquant.quant_data(data)[1]
19
+        except Exception as e:
20
+            pass
14 21
     token = auth.upload_token(bucket, key=key)
15 22
     ret, _ = qiniu.put_data(token, key, data, mime_type=mime_type)
16 23
     return ret.get('key')
17 24
 
18 25
 
19
-def upload_file_admin(obj, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default']):
26
+def upload_file_admin(obj, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True):
20 27
     # Django Admin Upload
21 28
     if not obj.image:
22 29
         return ''
23 30
     obj.image.seek(0)
24
-    return upload(obj.image.read(), key=key or obj.image.name, mime_type=mime_type, bucket=bucket)
31
+    return upload(obj.image.read(), key=key or obj.image.name, mime_type=mime_type, bucket=bucket, compress=compress)
25 32
 
26 33
 
27
-def upload_file_req(file, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default']):
34
+def upload_file_req(file, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True):
28 35
     # photo = request.FILES.get('photo', '')
29 36
     # <InMemoryUploadedFile: photo.png (image/png)>
30 37
     if not file:
31 38
         return ''
32 39
     file.seek(0)
33
-    return upload(file.read(), key=key or file.name, mime_type=mime_type, bucket=bucket)
40
+    return upload(file.read(), key=key or file.name, mime_type=mime_type, bucket=bucket, compress=compress)
34 41
 
35 42
 
36
-def upload_file_path(path, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default']):
43
+def upload_file_path(path, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True):
37 44
     if not path:
38 45
         return ''
39 46
     token = auth.upload_token(bucket, key=key)