繁体   English   中英

Django 显示一个用视图创建的 png

[英]Django display a png created with a view

我目前正在做一个项目,我想建立一个网站,您可以在其中输入任何 URL。 通过单击按钮,您应该会获得此请求网站的屏幕截图。 此外,还有另一个按钮可以将此 png 调制为 RGB 图像。

几天来,我遇到了一个问题,屏幕截图生成但不再显示在我的网站上,而仍然显示旧图像。 这是我的 HTML 模板。

<h1> CovertCast </h1>
<form action="" method="post">
    {% csrf_token %}
  <label>url:
    <input type="url" name="deine-url" value="https://">
  </label>
    <button type="submit">Get Screenshot</button>
</form>

{% load static %}
<img src="/media/screenshot_image.png" class="bild"/>

<form action="/modulated.html" method="post">
    {% csrf_token %}

    <button type="submit">Modulate</button>
</form>
<img src="/media/modulated_image.png" alt="abc"/>

我的函数视图如下所示:

def screenshot(request):
    DRIVER = 'chromedriver.exe'

    if request.method == 'POST' and 'deine-url' in request.POST:
        url = request.POST.get('deine-url', '')
        if url is not None and url != '':

            options = webdriver.ChromeOptions()
            options.add_argument('--ignore-certificate-errors')
            options.add_argument('--ignore-ssl-errors')
            driver = webdriver.Chrome(ChromeDriverManager().install())
            driver.get(url)
            img_dir = settings.MEDIA_ROOT
            img_name = ''.join(['screenshot', '_image.png'])
            path = os.path.join(img_dir, img_name)
            if not os.path.exists(img_dir):
                os.makedirs(img_dir)
            driver.save_screenshot(path)
            screenshott = img_name

            
            driver.quit()
            return render(request, 'main.html')
    else:
        
        return render(request, 'main.html')
def modulate(request):

        with open('screenshot_image.png', 'rb') as image:
            f = image.read()
            a = bytearray(f)
        w = 1280
        h = 720
        data = np.zeros([h, w, 3], dtype=np.uint8)
        i = 0
        x = 0
        x2 = 8
        y = 0
        y2 = 8
        while i < len(a) - 5:
            r = 160 * a[i] + 32 * a[i + 1]
            g = 160 * a[i + 2] + 32 * a[i + 3]
            b = 160 * a[i + 4] + 32 * a[i + 5]

            data[x:x2, y:y2] = [r, g, b]
            y += 8
            y2 += 8
            if y == w:
                x += 8
                x2 += 8
                y = 0
                y2 = 8
            i = i + 6
        modulatedimg = Image.fromarray(data)
        img_dir = settings.MEDIA_ROOT
        img_name = ''.join(['modulated', '_image.png'])
        full_img_path = os.path.join(img_dir, img_name)
        modulatedimg.save(full_img_path)
        return render(request, 'web/main.html')

应用程序中的 urls.py:

app_name = 'web'
urlpatterns = [
    path("", views.screenshot, name='screenshot'),
    path("/modulated", views.modulate, name='modulate'),

]

整个项目的urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('web/', include('web.urls')),

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

此外,我的应该调制 RGB 图像的视图在 Django 中根本不起作用,即使在我单独测试时它也起作用。

任何帮助深表感谢!

也许那个screenshott应该是screenshot

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM