58 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
| 
 | |
| import os
 | |
| 
 | |
| from django.http import HttpResponse
 | |
| from apps.utils.errors import SIGN_MAKE_FAIL
 | |
| from server.settings import BASE_DIR
 | |
| import numpy as np
 | |
| from rest_framework.response import Response
 | |
| from rest_framework.exceptions import ParseError
 | |
| from apps.utils.viewsets import CustomGenericViewSet
 | |
| from apps.utils.mixins import CustomCreateModelMixin
 | |
| from apps.utils.serializers import GenSignatureSerializer
 | |
| from rest_framework.views import APIView
 | |
| from rest_framework.decorators import action
 | |
| from rest_framework.serializers import Serializer
 | |
| from django.core.cache import cache
 | |
| import json
 | |
| import requests
 | |
| 
 | |
| 
 | |
| class SignatureViewSet(CustomCreateModelMixin, CustomGenericViewSet):
 | |
|     authentication_classes = ()
 | |
|     permission_classes = ()
 | |
|     create_serializer_class = GenSignatureSerializer
 | |
| 
 | |
|     def create(self, request, *args, **kwargs):
 | |
|         """
 | |
|         照片生成透明签名图片
 | |
| 
 | |
|         照片生成透明签名图片
 | |
|         """
 | |
|         import cv2
 | |
|         path = (BASE_DIR + request.data['path']).replace('\\', '/')
 | |
|         try:
 | |
|             image = cv2.imread(path, cv2.IMREAD_UNCHANGED)
 | |
|             size = image.shape
 | |
|             width = size[0]  # 宽度
 | |
|             height = size[1]  # 高度
 | |
|             if size[2] != 4:  # 判断
 | |
|                 background = np.zeros((size[0], size[1], 4))
 | |
|                 for yh in range(height):
 | |
|                     for xw in range(width):
 | |
|                         background[xw, yh, :3] = image[xw, yh]
 | |
|                         background[xw, yh, 3] = 255
 | |
|                 image = background
 | |
|             size = image.shape
 | |
|             for i in range(size[0]):
 | |
|                 for j in range(size[1]):
 | |
|                     if image[i][j][0] > 100 and image[i][j][1] > 100 and image[i][j][2] > 100:
 | |
|                         image[i][j][3] = 0
 | |
|                     else:
 | |
|                         image[i][j][0], image[i][j][1], image[i][j][2] = 0, 0, 0
 | |
|             ext = os.path.splitext(path)
 | |
|             new_path = ext[0] + '.png'
 | |
|             cv2.imwrite(new_path, image)
 | |
|             return Response({'path': new_path.replace(BASE_DIR, '')})
 | |
|         except Exception:
 | |
|             raise ParseError(**SIGN_MAKE_FAIL) |