【问题标题】:capture image and save it to database with django使用 django 捕获图像并将其保存到数据库
【发布时间】:2020-12-14 20:57:52
【问题描述】:

我正在尝试使用 django 制作一个网络应用程序,在该应用程序中,它会单击相机中的图像并将图像保存到数据库中。那如何实施?如果有可用的源代码,请分享它的链接。谢谢

【问题讨论】:

标签: python django database web-applications webcam


【解决方案1】:

我来到这里希望找到答案;没有一个,我特此提供我的...

诀窍是对图像进行编码并将其保存为 TextField

我提供的解决方案在每次加载 select_image.html 时读取图像的方式有点笨拙,但我这样做是因为我的要求有点复杂,这可以完成工作。我假设您知道如何从相机中获取图像(相当于我从文件中读取图像)。

有两个模板,select_image.htmldisplay_image.html。当第一次调用 select_image.html 时,它会从文件中读取 .png 图像并将图像保存到数据库中。当一张图片被选中时,它会从数据库中检索并显示在 display_image.html 中。

select_image.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Select Image</title>
</head>
<body>
    <h1>Select Image</h1>

    {% block content %}
        <ul>
            {% for image in images %}
                <li><a href="display-image/{{ image }}">{{ image }}</a></li>
            {% endfor %}
        </ul>
    {% endblock %}
</body>
</html>

display_image.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Display Image</title>
</head>
<body>
    <h1>Display Image</h1>

    {% block content %}
        <img id="image" src="{{ image }}" alt="image">
    {% endblock %}
    <p></p>
    <a href="/users/images">Images</a>
</body>
</html>

models.py

class Image(models.Model):
    name = models.CharField(max_length=25, null= False, blank=False, default='image_name', unique=True)
    image = models.TextField()

urls.py

urlpatterns = [
    path('images', views.Images.as_view(), name='images'),
    path('display-image/<str:image_name>/', views.DisplayImage.as_view(), name='display-image'),
]

views.py

from PIL import Image as PilImage
import io
import base64
import os
from .models import Image

class Images(View):
    url = "images/select_image.html"

    def get(self, request):
        dir = <image file directory>
        image_names = ['red', 'green', 'blue']
        for image_name in image_names:
            base_path = os.sep.join([dir, image_name])
            path = '.'.join([base_path, 'png'])
            pil_image = PilImage.open(path)
            encoded_image = self._encode_image(pil_image)
            Image.objects.get_or_create(name=image_name, image=encoded_image)
        context = {'images': image_names}
        return render(request, self.url, context)

    @staticmethod
    def _encode_image(image):
        """Return image encoded to base64 from a PIL.Image.Image."""
        io_buffer = io.BytesIO()
        image.save(io_buffer, format='PNG')
        saved_image = io_buffer.getvalue()
        encoded_image = ''.join(['data:image/jpg;base64,', base64.b64encode(saved_image).decode()])
        return encoded_image

class DisplayImage(View):
    url = "images/display_image.html"

    def get(self, request, image_name):
        image = get_object_or_404(Image, name=image_name)
        context = {'image': image.image}
        return render(request, self.url, context)

【讨论】:

    猜你喜欢
    • 2015-12-11
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 2021-02-07
    • 1970-01-01
    相关资源
    最近更新 更多