[PYTHON] Combinez deux images avec Django

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

Combinez deux images avec Django
Combinez Fast API avec Django ORM
Comparez deux images avec le hachage d'image
Internationalisation avec Django
CRUD avec Django
Authentifier Google avec Django
Django 1.11 a démarré avec Python3.6
Télécharger des fichiers avec Django
Résumé du développement avec Django
Sortie PDF avec Django
Sortie Markdown avec Django
Utiliser Gentelella avec Django
Premiers pas avec Django 1
Envoyer des e-mails avec Django
Téléchargement de fichiers avec django
Utilisez LESS avec Django
La mutualisation mécanise avec Django
Utiliser MySQL avec Django
Django à partir d'aujourd'hui
Centrer l'image avec python-pptx
Premiers pas avec Django 2
Télécharger automatiquement des images avec grattage
Faites Django avec CodeStar (Python3.6.8, Django2.2.9)
Images en bordure avec python Partie 1
Lancez-vous avec Django! ~ Tutoriel ⑤ ~
Environnement de site Web de configuration minimale avec django
Créer une API avec Django
Faites Django avec CodeStar (Python3.8, Django2.1.15)
Déployer Django sans serveur avec Lambda
Python3 + Django ~ Mac ~ avec Apache
Enregistrez des images avec le web scraping
Premiers pas avec Python Django (1)
Créer une page d'accueil avec django
Premiers pas avec Python Django (4)
Créer une application Web avec Django
Premiers pas avec Python Django (3)
Lancez-vous avec Django! ~ Tutoriel ⑥ ~
Utilisez Django pour enregistrer les données de tweet
Effectuer le cryptage AES avec DJango
Introduction à Python Django (6)
Premiers pas avec Django avec PyCharm
Web en temps réel avec les chaînes Django
Suppression de double envoi avec Django
Framework Django REST avec Vue.js
Utilisez prefetch_related commodément avec Django
Premiers pas avec Python Django (5)
Connectez-vous avec Django Rest Framework
Qiita API Oauth avec Django
Convertir une image au format PIL lue depuis un formulaire avec Django au format base64
Développement piloté par les tests avec Django Partie 3
Reconnaissance des nombres dans les images avec Python
Étapes pour développer Django avec VSCode
Développement piloté par les tests avec Django Partie 4
Configurer la connexion sociale avec Django
Développement piloté par les tests avec Django Partie 6
Mesurer la couverture des applications Django avec Coverage.py
Gérer les fichiers csv avec Django (django-import-export)
HTTPS avec Django et Let's Encrypt
Déployer l'application Django avec Docker
Standardiser le HTML à louer avec Django
Jointure externe gauche dans le modèle Django