[PYTHON] Kombiniere zwei Bilder mit Django

Ü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

Kombiniere zwei Bilder mit Django
Kombinieren Sie Fast API mit Django ORM
Vergleichen Sie zwei Bilder mit dem Bild-Hash
Internationalisierung mit Django
CRUD mit Django
Authentifizieren Sie Google mit Django
Django 1.11 wurde mit Python3.6 gestartet
Laden Sie Dateien mit Django hoch
Entwicklungsverdauung mit Django
PDF mit Django ausgeben
Markdown-Ausgabe mit Django
Verwenden Sie Gentelella mit Django
Erste Schritte mit Django 1
Mail mit Django senden
Datei-Upload mit Django
Verwenden Sie WENIGER mit Django
Pooling mechanisieren mit Django
Verwenden Sie MySQL mit Django
Django ab heute
Bild mit Python-Pptx zentrieren
Erste Schritte mit Django 2
Laden Sie Bilder automatisch mit Scraping herunter
Mach Django mit CodeStar (Python3.6.8, Django2.2.9)
Angrenzende Bilder mit Python Teil 1
Fangen Sie mit Django an! ~ Tutorial ⑤ ~
Minimale Konfigurations-Website-Umgebung mit Django
Erstellen Sie eine API mit Django
Mach Django mit CodeStar (Python3.8, Django2.1.15)
Stellen Sie Django serverlos mit Lambda bereit
Python3 + Django ~ Mac ~ mit Apache
Speichern Sie Bilder mit Web Scraping
Erste Schritte mit Python Django (1)
Erstellen Sie eine Homepage mit Django
Erste Schritte mit Python Django (4)
Erstellen Sie eine Webanwendung mit Django
Erste Schritte mit Python Django (3)
Fangen Sie mit Django an! ~ Tutorial ⑥ ~
Verwenden Sie Django, um Tweet-Daten zu speichern
Führen Sie eine AES-Verschlüsselung mit DJango durch
Einführung in Python Django (6)
Erste Schritte mit Django mit PyCharm
Echtzeit-Web mit Django-Kanälen
Doppelte Submit-Unterdrückung mit Django
Django REST Framework mit Vue.js
Verwenden Sie prefetch_related bequem mit Django
Erste Schritte mit Python Django (5)
Melden Sie sich mit dem Django Rest Framework an
Qiita API Oauth mit Django
Konvertieren Sie Bilder aus dem PIL-Format, die mit Django aus dem Formular gelesen wurden, in das base64-Format
Testgetriebene Entwicklung mit Django Teil 3
Zahlenerkennung in Bildern mit Python
Schritte zur Entwicklung von Django mit VSCode
Testgetriebene Entwicklung mit Django Teil 4
Richten Sie mit Django ein soziales Login ein
Testgetriebene Entwicklung mit Django Teil 6
Messen Sie die Abdeckung der Django-Anwendung mit Coverage.py
Behandeln Sie CSV-Dateien mit Django (Django-Import-Export)
HTTPS mit Django und Let's Encrypt
Stellen Sie die Django-Anwendung mit Docker bereit
Standardisieren Sie HTML, um mit Django gemietet zu werden
Linke äußere Verbindung im Django-Modell