python - 使用 django 捕获图像并将其保存到数据库
问题描述
我正在尝试使用 django 制作一个 Web 应用程序,它在其中单击相机中的图像并将图像保存到数据库中。那如何实施?如果有可用的源代码,请分享它的链接。谢谢你
解决方案
我来到这里希望找到答案;没有一个,我特此提供我的...
诀窍是对图像进行编码并将其保存为TextField。
我提供的解决方案在每次加载select_image.html时读取图像的方式有点笨拙,但我这样做是因为我的要求有点复杂,这可以完成工作。我假设您知道如何从相机中获取图像(这相当于我从文件中读取图像)。
有两个模板,select_image.html和display_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>
模型.py
class Image(models.Model):
name = models.CharField(max_length=25, null= False, blank=False, default='image_name', unique=True)
image = models.TextField()
网址.py
urlpatterns = [
path('images', views.Images.as_view(), name='images'),
path('display-image/<str:image_name>/', views.DisplayImage.as_view(), name='display-image'),
]
视图.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)
推荐阅读
- java - tic tac toe 水平/垂直和对角线检查不工作 - java
- python - 在 Python 中按字母顺序和频率排序的时间复杂度是多少?
- ffmpeg - FFMPEG:使用 fast-seek 和 copyts 编码 WEBM 会导致错误的视频长度
- atom-editor - ATOM/PlatformIO OpenOCD 初始化失败
- javascript - 这种情况下正确的异步/等待实现是什么?
- angular - “[(ngModel)]”在 Ionic 4 中没有绑定
- php - PHP sqlite sql问题
- google-apps-script - 尝试使用绑定到 Google 表格的应用脚本写入其他用户的表格/驱动器
- java - 在 JNI.H 上调用 NewObject 时的 UknownFunction
- llvm - 尝试在 llvm 中添加新指令时出现错误“没有名为“Int32Ty”的成员