Überblick: Ein Prozess, der das von Django hochgeladene Bild mit dem festen Bild kombiniert.
wird bearbeitet:
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': 'Die Kapazität ist vorbei.',
}
}
return JsonResponse(image_data)
#Schreiben Sie das hochgeladene Bild
for chunk in req_file.chunks():
destination.write(chunk)
image = cv2.imread(path)
width, height = image.shape[:2]
#Verarbeitung zur Kombination mit dem oberen Bild
size = width / 10 if width > height else height / 10
size = int(size)
margin = size / 5
margin = int(margin)
watermark = cv2.imread("Voller Pfad des oberen Bildes", cv2.IMREAD_UNCHANGED)
watermark = cv2.resize(watermark, (size, size))
watermark_width, watermark_height = watermark.shape[:2]
#Extrahieren Sie nur den Alphakanal des Bildes
mask_ = watermark[:,:,3]
#Erstellen Sie ein ndarray mit in BGR gespeicherten Alphakanalwerten
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~Standardisiert auf 1
mask = mask / 255.0
#Wirf den Wert in float.
image = image.astype('float64')
#Ich brauche den Alpha-Kanal nicht mehr, also nimm die anderen raus
watermark = watermark[:,:,:3]
#Fügen Sie das Bild an der angegebenen Position ein und kehren Sie zurück
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
#Schreiben Sie ein zusammengesetztes Bild
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:
#Gibt 404 zurück, wenn eine Ausnahme auftritt
traceback.format_exc()
return Http404("message")
Recommended Posts