Aperçu: Un processus qui combine l'image téléchargée par Django avec l'image fixe.
En traitement:
import json
import numpy as np
import cv2
import os
def upload(request):
try:
req_file = request.FILES['image']
file_path = '/tmp/'
tmp_dir = file_path
if not os.path.isdir(tmp_dir):
os.makedirs(tmp_dir)
path = os.path.join(tmp_dir, req_file.name)
destination = open(path, 'wb')
if req_file.size > 1048576:
image_data = {
'status': 400,
'data': {
'message': 'La capacité est terminée.',
}
}
return JsonResponse(image_data)
#Écrivez l'image téléchargée
for chunk in req_file.chunks():
destination.write(chunk)
image = cv2.imread(path)
width, height = image.shape[:2]
#Traitement à combiner avec l'image supérieure
size = width / 10 if width > height else height / 10
size = int(size)
margin = size / 5
margin = int(margin)
watermark = cv2.imread("Chemin complet de l'image du haut", cv2.IMREAD_UNCHANGED)
watermark = cv2.resize(watermark, (size, size))
watermark_width, watermark_height = watermark.shape[:2]
#Extraire uniquement le canal alpha de l'image
mask_ = watermark[:,:,3]
#Créer un ndarray avec des valeurs de canal alpha stockées dans BGR
mask = np.ones((watermark_width, watermark_height, 3))
for i in range(len(mask)):
for j in range(len(mask[0])):
mask[i][j] = np.ones(3) * mask_[i][j]
# 0~Standardisé pour être 1
mask = mask / 255.0
#Convertissez la valeur en float.
image = image.astype('float64')
#Je n'ai plus besoin du canal alpha, alors élimine les autres
watermark = watermark[:,:,:3]
#Collez l'image dans la position spécifiée et retournez
image[width - watermark_width -margin:width -margin, height - watermark_height -margin:height -margin] *= 1 - mask
image[width - watermark_width -margin:width -margin, height - watermark_height -margin:height -margin] += mask * watermark
root, ext = os.path.splitext(req_file.name)
file_name = "test" + ext
#Écrire une image composite
cv2.imwrite(tmp_dir + '/' + file_name , image)
image_data = {
'status': 200,
'data': {
'name': req_file.name,
'image_url': file_path + "/" + file_name,
'size': req_file.size
}
}
return JsonResponse(image_data)
except:
#Renvoie 404 si une exception se produit
traceback.format_exc()
return Http404("message")
Recommended Posts