@@ -2,11 +2,7 @@  | 
            ||
| 2 | 2 | 
                 | 
            
| 3 | 3 | 
                from __future__ import division  | 
            
| 4 | 4 | 
                 | 
            
| 5 | 
                -import os  | 
            |
| 6 | 
                -  | 
            |
| 7 | 
                -import shortuuid  | 
            |
| 8 | 5 | 
                from curtail_uuid import CurtailUUID  | 
            
| 9 | 
                -from django.conf import settings  | 
            |
| 10 | 6 | 
                from django.contrib.auth.hashers import check_password  | 
            
| 11 | 7 | 
                from django.db import transaction  | 
            
| 12 | 8 | 
                from isoweek import Week  | 
            
                @@ -30,8 +26,6 @@ from utils.redis.rorder import set_lensman_order_record  | 
            ||
| 30 | 26 | 
                from utils.redis.rprice import get_lensman_price_fixed, set_lensman_price_fixed  | 
            
| 31 | 27 | 
                from utils.redis.rprofile import set_profile_info  | 
            
| 32 | 28 | 
                from utils.storage_utils import file_save  | 
            
| 33 | 
                -from utils.thumbnail_utils import make_thumbnail  | 
            |
| 34 | 
                -from utils.watermark_utils import watermark_wrap  | 
            |
| 35 | 29 | 
                 | 
            
| 36 | 30 | 
                 | 
            
| 37 | 31 | 
                @logit  | 
            
                @@ -2,7 +2,6 @@  | 
            ||
| 2 | 2 | 
                 | 
            
| 3 | 3 | 
                from __future__ import division  | 
            
| 4 | 4 | 
                 | 
            
| 5 | 
                -import os  | 
            |
| 6 | 5 | 
                import random  | 
            
| 7 | 6 | 
                 | 
            
| 8 | 7 | 
                from curtail_uuid import CurtailUUID  | 
            
                @@ -32,7 +31,6 @@ from utils.redis.rorder import get_lensman_order_record  | 
            ||
| 32 | 31 | 
                from utils.redis.rprice import get_lensman_price_fixed  | 
            
| 33 | 32 | 
                from utils.sql.raw import PAI2_HOME_API  | 
            
| 34 | 33 | 
                from utils.storage_utils import file_save  | 
            
| 35 | 
                -from utils.thumbnail_utils import make_thumbnail  | 
            |
| 36 | 34 | 
                from utils.time_utils import origin_expired_stamps  | 
            
| 37 | 35 | 
                from utils.url_utils import img_url, share_url  | 
            
| 38 | 36 | 
                 | 
            
                @@ -1,6 +1,5 @@  | 
            ||
| 1 | 1 | 
                # -*- coding: utf-8 -*-  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 
                -from django.conf import settings  | 
            |
| 4 | 3 | 
                from django.conf.urls import include, url  | 
            
| 5 | 4 | 
                 | 
            
| 6 | 5 | 
                 | 
            
                @@ -2,9 +2,7 @@  | 
            ||
| 2 | 2 | 
                 | 
            
| 3 | 3 | 
                import os  | 
            
| 4 | 4 | 
                 | 
            
| 5 | 
                -import shortuuid  | 
            |
| 6 | 5 | 
                from curtail_uuid import CurtailUUID  | 
            
| 7 | 
                -from django.conf import settings  | 
            |
| 8 | 6 | 
                from django.db import transaction  | 
            
| 9 | 7 | 
                from django.shortcuts import render  | 
            
| 10 | 8 | 
                from django_q.tasks import async  | 
            
                @@ -25,8 +23,6 @@ from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, GROUP_USERS_DELETED_SET, GRO  | 
            ||
| 25 | 23 | 
                GROUP_USERS_QUIT_SET, GROUP_USERS_REFUSED_SET, UUID_LIST)  | 
            
| 26 | 24 | 
                from utils.redis.ruuid import generate_uuids, update_uuids  | 
            
| 27 | 25 | 
                from utils.storage_utils import file_save  | 
            
| 28 | 
                -from utils.thumbnail_utils import make_thumbnail  | 
            |
| 29 | 
                -from utils.watermark_utils import watermark_wrap  | 
            |
| 30 | 26 | 
                 | 
            
| 31 | 27 | 
                 | 
            
| 32 | 28 | 
                @logit  | 
            
                @@ -163,24 +159,7 @@ def session_join_api(request):  | 
            ||
| 163 | 159 | 
                #  | 
            
| 164 | 160 | 
                if group_created:  | 
            
| 165 | 161 | 
                for photo in photos:  | 
            
| 166 | 
                - photo_path = photo.p_photo_path  | 
            |
| 167 | 
                -            photo_thumbnail_path = photo_path.replace('.', '_thumbnail.')
               | 
            |
| 168 | 
                -            photo_thumbnail2_path = photo_path.replace('.', '_thumbnail2.')
               | 
            |
| 169 | 
                -  | 
            |
| 170 | 
                - # 群组照片缩略图生成  | 
            |
| 171 | 
                - # 双列: 540, 40-50K  | 
            |
| 172 | 
                - photo_w, photo_h, photo_thumbnail_w, photo_thumbnail_h = make_thumbnail(  | 
            |
| 173 | 
                -                os.path.join(settings.MEDIA_ROOT, photo_path).replace('\\', '/'),
               | 
            |
| 174 | 
                -                os.path.join(settings.MEDIA_ROOT, photo_thumbnail_path).replace('\\', '/'),
               | 
            |
| 175 | 
                - settings.THUMBNAIL_MAX_WIDTH  | 
            |
| 176 | 
                - )  | 
            |
| 177 | 
                -  | 
            |
| 178 | 
                - # 单列: 1080, xx-100K  | 
            |
| 179 | 
                - photo_w, photo_h, photo_thumbnail2_w, photo_thumbnail2_h = make_thumbnail(  | 
            |
| 180 | 
                -                os.path.join(settings.MEDIA_ROOT, photo_path).replace('\\', '/'),
               | 
            |
| 181 | 
                -                os.path.join(settings.MEDIA_ROOT, photo_thumbnail2_path).replace('\\', '/'),
               | 
            |
| 182 | 
                - settings.THUMBNAIL_MAX_WIDTH2  | 
            |
| 183 | 
                - )  | 
            |
| 162 | 
                + photo_info = file_save(photo_path=photo.p_photo_path, thumbnail=True)  | 
            |
| 184 | 163 | 
                 | 
            
| 185 | 164 | 
                # 群组照片记录创建  | 
            
| 186 | 165 | 
                group_photo = GroupPhotoInfo.objects.create(  | 
            
                @@ -188,15 +167,15 @@ def session_join_api(request):  | 
            ||
| 188 | 167 | 
                user_id=user_id,  | 
            
| 189 | 168 | 
                nickname=user.final_nickname,  | 
            
| 190 | 169 | 
                avatar=user.avatar,  | 
            
| 191 | 
                - photo_path=photo_path,  | 
            |
| 192 | 
                - photo_w=photo_w,  | 
            |
| 193 | 
                - photo_h=photo_h,  | 
            |
| 194 | 
                - photo_thumbnail_path=photo_thumbnail_path,  | 
            |
| 195 | 
                - photo_thumbnail_w=photo_thumbnail_w,  | 
            |
| 196 | 
                - photo_thumbnail_h=photo_thumbnail_h,  | 
            |
| 197 | 
                - photo_thumbnail2_path=photo_thumbnail2_path,  | 
            |
| 198 | 
                - photo_thumbnail2_w=photo_thumbnail2_w,  | 
            |
| 199 | 
                - photo_thumbnail2_h=photo_thumbnail2_h,  | 
            |
| 170 | 
                + photo_path=photo_info.photo_path,  | 
            |
| 171 | 
                + photo_w=photo_info.photo_w,  | 
            |
| 172 | 
                + photo_h=photo_info.photo_h,  | 
            |
| 173 | 
                + photo_thumbnail_path=photo_info.photo_thumbnail_path,  | 
            |
| 174 | 
                + photo_thumbnail_w=photo_info.photo_thumbnail_w,  | 
            |
| 175 | 
                + photo_thumbnail_h=photo_info.photo_thumbnail_h,  | 
            |
| 176 | 
                + photo_thumbnail2_path=photo_info.photo_thumbnail2_path,  | 
            |
| 177 | 
                + photo_thumbnail2_w=photo_info.photo_thumbnail2_w,  | 
            |
| 178 | 
                + photo_thumbnail2_h=photo_info.photo_thumbnail2_h,  | 
            |
| 200 | 179 | 
                photo_from=GroupPhotoInfo.SESSION_GROUP,  | 
            
| 201 | 180 | 
                session_id=photo.session_id,  | 
            
| 202 | 181 | 
                lensman_id=photo.lensman_id,  | 
            
                @@ -22,21 +22,27 @@ class DotDict(dict):  | 
            ||
| 22 | 22 | 
                 | 
            
| 23 | 23 | 
                 | 
            
| 24 | 24 | 
                @transaction.atomic  | 
            
| 25 | 
                -def file_save(file_, prefix='img', ext='jpeg', watermark=False, thumbnail=False):  | 
            |
| 26 | 
                - ext = os.path.splitext(file_.name)[-1] or ext  | 
            |
| 25 | 
                +def file_save(photo=None, photo_path=None, prefix='img', ext='jpeg', watermark=False, thumbnail=False):  | 
            |
| 26 | 
                + # Photo  | 
            |
| 27 | 
                + photo = photo or default_storage.open(photo_path)  | 
            |
| 27 | 28 | 
                 | 
            
| 28 | 
                - photo, created = PhotoUUIDInfo.objects.select_for_update().get_or_create(photo_md5=calculate_md5(file_))  | 
            |
| 29 | 
                + # Ext  | 
            |
| 30 | 
                + ext = os.path.splitext(photo.name)[-1] or ext  | 
            |
| 29 | 31 | 
                 | 
            
| 32 | 
                + photo, created = PhotoUUIDInfo.objects.select_for_update().get_or_create(photo_md5=calculate_md5(photo))  | 
            |
| 33 | 
                +  | 
            |
| 34 | 
                + # 照片路径  | 
            |
| 30 | 35 | 
                photo_path = photo.photo_path  | 
            
| 31 | 36 | 
                if not photo_path:  | 
            
| 32 | 37 | 
                         photo_path = '{}/{}{}'.format(prefix, shortuuid.uuid(), ext)
               | 
            
| 33 | 38 | 
                if default_storage.exists(photo_path):  | 
            
| 34 | 39 | 
                default_storage.delete(photo_path)  | 
            
| 35 | 
                - default_storage.save(photo_path, file_)  | 
            |
| 40 | 
                + default_storage.save(photo_path, photo)  | 
            |
| 36 | 41 | 
                 | 
            
| 37 | 42 | 
                photo.photo_path = photo_path  | 
            
| 38 | 43 | 
                photo.save()  | 
            
| 39 | 44 | 
                 | 
            
| 45 | 
                + # 水印  | 
            |
| 40 | 46 | 
                if watermark:  | 
            
| 41 | 47 | 
                if not photo.photo_watermark_path:  | 
            
| 42 | 48 | 
                             photo_watermark_path = 'photo/{}{}'.format(shortuuid.uuid(), ext)
               | 
            
                @@ -48,6 +54,7 @@ def file_save(file_, prefix='img', ext='jpeg', watermark=False, thumbnail=False)  | 
            ||
| 48 | 54 | 
                photo.photo_watermark_path  | 
            
| 49 | 55 | 
                photo.save()  | 
            
| 50 | 56 | 
                 | 
            
| 57 | 
                + # 缩略图  | 
            |
| 51 | 58 | 
                if thumbnail:  | 
            
| 52 | 59 | 
                if not photo.photo_thumbnail_path:  | 
            
| 53 | 60 | 
                # 双列: 540, 40-50K  |