Как изменить размер и переименовать изображение во время его загрузки? - PullRequest
1 голос
/ 28 апреля 2019

Я пытаюсь изменить размер (создать действительный эскиз) и переименовать файл, когда я загружаю его в виде в Django. Я видел библиотеку PIL и использую ее, но безрезультатно.

views.py

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.core.files.storage import FileSystemStorage
from django.urls import reverse
from PIL import Image

@login_required
def zoom(request):
    uploaded_url = {}
    if request.method == 'POST' and request.FILES.getlist('document', False):
        myfiles = request.FILES.getlist('document')
        for myfile in myfiles:
            fs = FileSystemStorage()
            filename = fs.save(myfile.name, myfile)
            uploaded_file_url = fs.url(filename)
            uploaded_url[filename] = uploaded_file_url
            imagen = ((Image.open(myfile)).resize((191,176))).save("thumb.png")
    return render(request, "visores/acercamiento.html", {
        'uploaded_url' : uploaded_url,
    })

acercamiento.html

<form enctype="multipart/form-data" method="post">
    {% csrf_token %}
    <h4>Búsqueda general</h4>
    <input type="file" name="document" accept="image/*" id="b">
    <button type="submit" id="subir">Subir imagen</button>
</form>
{% if uploaded_url %}
    {% for name, url in uploaded_url.items %}
        {% load static %}
        <div id="bai">
            <a class="magnifier-thumb-wrapper demo" href="{{ url }}"> 
            <img id="thumb2" src='http://127.0.0.1:8000/media/thumb.png'>
            </a>
        </div>
    {% endfor %}
{% endif %}

Ожидаемые результаты: /media/P1565.png /media/thumb.png

Фактический результат: /media/P1565.png

Ответы [ 2 ]

2 голосов
/ 28 апреля 2019

Это потому, что вы не возвращаете URL вашего недавно сохраненного эскиза в шаблон.

filename = fs.save(myfile.name, myfile)  # you're saving "P1565.png";
uploaded_file_url = fs.url(filename)  # you're getting the URL for "P1565.png";
uploaded_url[filename] = uploaded_file_url  # the URL value is "/media/P1565.png";

Таким образом, вы должны установить значение uploaded_url для вашего thumb.png URL-адреса после изменения размера и сохранения его.

thumb_url = os.path.join(os.path.dirname(uploaded_file_url), 'thumb.png')  # specify your thumbnail URL;
imagen = ((Image.open(myfile)).resize((191,176))).save('thumb.png')  # re-size and save your thumbnail to the corresponding path;
uploaded_url[filename] = thumb_url  # assign the new URL as the new value;
1 голос
/ 30 апреля 2019

Я решил это! Благодаря @Viktor Petrov, это часть кода, которая сохраняет файл на «носителе» ковра:

thumb_url = os.path.join(os.path.dirname(uploaded_file_url), 'thumb.png')  # specify your thumbnail URL;
imagen = (Image.open(myfile)).resize((191,176),Image.ANTIALIAS).save(os.path.join(MEDIA_ROOT,'thumb.png')) # re-size and save your thumbnail to the corresponding path;            
uploaded_url['thumb.png'] = thumb_url
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...