Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Django에서 클라이언트 측 이미지 확대/축소 및 회전

<시간/>

때로는 이미지를 회전하거나 확대/축소해야 할 수도 있습니다. 이러한 경우 클라이언트 측 이미지 확대/축소 라이브러리를 사용하여 html 파일에 확대/축소 회전하는 jquery 기능을 추가합니다. html 파일에 jquery js와 css를 로드하기만 하면 됩니다.

Django 프로젝트와 앱을 만듭니다. URL 설정 INSTALLED_APPS에 앱 추가와 같은 몇 가지 기본적인 작업을 수행합니다.

django-client-side-image-cropping 설치 라이브러리

pip install django-client-side-image-cropping

이제 settings.py에서 다음 줄을 추가하십시오 -

INSTALLED_APPS+=['client_side_image_cropping']

여기에서는 모듈을 앱으로 추가하는 간단한 설정을 완료했습니다.

예시

models.py에서 , 다음 줄을 추가하십시오 -

from django.db import models

# Create your models here.
class Data(models.Model):

   image=models.ImageField(upload_to ='myimages/')

여기에서 이미지 필드가 있는 모델을 설정합니다.

settings.py.에서 미디어 루트를 설정합니다.

url.py에서 , 다음 줄을 추가하십시오 -

from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
   path('', views.home,name="home"),
]
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_RO
OT)

여기에서는 기본적인 미디어 URL을 만들었습니다. 확실히 알고 있는 설정입니다.

이제 views.py에서 , 다음을 추가하십시오 -

from django.shortcuts import render
from django import forms
from .models import Data
from client_side_image_cropping import ClientsideCroppingWidget

# Create your views here.
class DataForm(forms.ModelForm):
   class Meta:
      model=Data
         fields="__all__"
         widgets = {
            'image': ClientsideCroppingWidget(
               width=400,
               height=600,
               preview_width=100,
               preview_height=150,
            )
         }

def home(request):
   if request.method =="POST":
      form=DataForm(request.POST,request.FILES)
      if form.is_valid():
         form.save()
   form=DataForm()
   return render(request,'home.html',{"form":form})

여기서는 간단한 양식을 만들었습니다. 모델 양식이므로 이미지 필드에 자르기 위젯을 추가했습니다.

home.html에서 다음을 추가하십시오 -

{% load static %}
{% load cropping %}
{% load thumbnail %}
<!DOCTYPE html>
<html>
   <head>
      <title>
         TUT
      </title>
      <link rel="stylesheet" href="{% static "client_side_i
mage_cropping/cropping.css" %}"></script>
      <link rel="stylesheet" href="{% static "client_side_i
mage_cropping/cropping_widget.css" %}"></script>
      <script src="https://ajax.googleapis.com/ajax/libs/jq
uery/1.12.4/jquery.min.js"></script>
      <script src="{% static "client_side_image_cropping/cr
oppie.min.js" %}"></script>
      <script src="{% static "client_side_image_cropping/cr
opping_widget.js" %}"></script>
   </head>
   <body>
      <h2>HI</h2>
         {% csrf_token %}
         <form method="post" enctype="multipart/formdata">
            {% csrf_token %}
            {{ form.as_p }}
            <input type="submit" value="Save"/>
      </form>
   </body>
</html>

프론트엔드에서 일부 jQuery와 일부 스타일을 로드하고 입력을 받을 양식을 렌더링합니다.

이제 모든 작업이 완료되었습니다. 출력을 확인해보자.

출력

사진을 회전하고 확대/축소할 수 있는 이와 같은 인터페이스를 얻게 됩니다. 그다지 보기 좋은 인터페이스는 아니지만 CSS를 사용하여 수정할 수 있습니다.

업로드된 이미지가 옮겨진 것처럼 보일 수 있으므로 회전을 사용하여 올바르게 설정하십시오. 그 변위는 브라우저 문제로 인해 발생할 수 있습니다.

Django에서 클라이언트 측 이미지 확대/축소 및 회전 Django에서 클라이언트 측 이미지 확대/축소 및 회전