[英]saving Base64ImageField Type using Django Rest saves it as Raw image. How do I convert it to a normal image
I have 5 image fields in my model , imageA, imageB, imageC, imageD and imageE I am trying to save the images in the following manner.The image are of type Base64ImageField
我的模型中有5个图像字段,imageA,imageB,imageC,imageD和imageE我试图以下列方式保存图像。图像类型为
Base64ImageField
images=["imageA","imageB","imageC","imageD","imageE"]
for field in images:
if field in serializer.validated_data:
content = serializer.validated_data[field]
dict = {field : content}
modelJob.objects.filter(id=modjob.id).update(**dict)
In the above code content
contains the raw data.I am trying to update the image using the dict I created (the key is the field name and value is the content). 在上面的代码
content
包含原始数据。我正在尝试使用我创建的字典更新图像(键是字段名称,值是内容)。
However the images saved in the imageField of the model are raw and not an actual image. 但是,保存在模型的imageField中的图像是原始图像而不是实际图像。 How can I fix this ?
我怎样才能解决这个问题 ? This is what my serializer looks like
这就是我的序列化程序的样子
class Serializer_Custom_RX(serializers.ModelSerializer):
imageA = Base64ImageField(max_length=None, use_url=True, )
imageB = Base64ImageField(max_length=None, use_url=True, )
imageC = Base64ImageField(max_length=None, use_url=True, )
imageD = Base64ImageField(max_length=None, use_url=True, )
class Meta:
model = modelTest
fields = [
'title',
'zip',
'imageA','imageB','imageC','imageD',
]
More info: 更多信息:
If I do something like this 如果我做这样的事情
modelJob.instance.imageA.save(content=content,name="image.jpeg")
it works fine and the problem is solved.However there are two problems with this approach first of all I do not know the extension. 它工作正常,问题解决了。但是这种方法有两个问题,首先我不知道扩展。 How do I extract an extension ?
如何提取扩展名? I am just guessing a jpeg here and it works.
我只是猜测一个jpeg在这里,它的工作原理。 The next thing is Ill have to check for imageA,B,C,D and E if they exist and then save each one individually.
接下来是Ill必须检查imageA,B,C,D和E(如果它们存在)然后单独保存每个。 If I could come up with a dynamic solution close to something that I have that would work as well.
如果我能提出一个动态的解决方案,接近我所拥有的那些也可以工作的东西。 This is what my jsondata looks like that I am posting
这就是我发布的jsondata的样子
{
"title" : "Some Title",
"zip":12345,
"imageA":"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"
}
The images encoding should come from the client, this is how you can know which format of each one has. 图像编码应来自客户端,这是您可以知道每个格式的格式。 Example:
例:
base_64 = "data:image/gif;base64,R0lGODlhPQBEAPeoAJosM//AwO/AwHVYZ/z595kzAP/s7P+goOXMv8+fhw/v739......
You will receive it from the client and you know that is a .gif 您将从客户端收到它,并且您知道这是.gif
Once you have validated the extensions and the base64 you can convert it to images and save it in your OS: 验证扩展和base64后,您可以将其转换为图像并将其保存在操作系统中:
Convert string in base64 to image and save on filesystem in Python or Decoding base64 from POST to use in PIL 将base64中的字符串转换为图像并在Python中保存文件系统或从POST解码base64以在PIL中使用
Once you have the images in your OS, you can link them to your ImageField in the model changing the name
property: Set Django's FileField to an existing file 在操作系统中有图像后,可以在更改
name
属性的模型中将它们链接到ImageField: 将Django的FileField设置为现有文件
I hope that is clear and helpful!! 我希望这是明确和有用的!
Short answer is : 简短的回答是:
import imghdr
extension = imghdr.what(file_name, decoded_file)
ref : https://docs.python.org/2/library/imghdr.html OR https://docs.python.org/3/library/imghdr.html 参考: https : //docs.python.org/2/library/imghdr.html或https://docs.python.org/3/library/imghdr.html
Basically import imghdr is the key in function Base64ImageField.get_file_extension to get / extract the extension of the function. 基本上导入imghdr是函数Base64ImageField.get_file_extension中的关键,用于获取/提取函数的扩展。
With below class extend / code you don't need to do modelJob.instance.imageA.save(content=content,name="image.jpeg") 使用以下类扩展/代码,您不需要执行modelJob.instance.imageA.save(content = content,name =“image.jpeg”)
You need to add this class in your codebase to call or for trial purpose you can add in same Serializer class file itself. 您需要在代码库中添加此类以进行调用或出于试用目的,您可以添加相同的Serializer类文件本身。
from django.core.files.base import ContentFile
import base64
import six
import uuid
class Base64ImageField(serializers.ImageField):
"""
A Django REST framework field for handling image-uploads through raw post data.
It uses base64 for encoding and decoding the contents of the file.
Heavily based on
https://github.com/tomchristie/django-rest-framework/pull/1268
Updated for Django REST framework 3.
"""
def to_internal_value(self, data):
# Check if this is a base64 string
if isinstance(data, six.string_types):
# Check if the base64 string is in the "data:" format
if 'data:' in data and ';base64,' in data:
# Break out the header from the base64 content
header, data = data.split(';base64,')
# Try to decode the file. Return validation error if it fails.
try:
decoded_file = base64.b64decode(data)
except TypeError:
self.fail('invalid_image')
# Generate file name:
file_name = str(uuid.uuid4())[:12] # 12 characters are more than enough.
# Get the file name extension:
file_extension = self.get_file_extension(file_name, decoded_file)
complete_file_name = "%s.%s" % (file_name, file_extension, )
data = ContentFile(decoded_file, name=complete_file_name)
return super(Base64ImageField, self).to_internal_value(data)
def get_file_extension(self, file_name, decoded_file):
import imghdr
extension = imghdr.what(file_name, decoded_file)
extension = "jpg" if extension == "jpeg" else extension
return extension
One more information is you can have 您还可以获得更多信息
Base64ImageField(
max_length=None,
use_url=True,
required=False,
allow_null=True,
allow_empty_file=True
)
these params in case you want to make this optional. 这些参数如果你想让这个选项。
NOTE :: I had got this code from StackOverflow only, but not remembered from where I got this I had liked this answer too. 注意::我只从StackOverflow获得此代码,但不记得我从哪里得到这个我也喜欢这个答案。
Here is how I solved this problem. 这是我如何解决这个问题。 None of the answers above had this information
以上答案都没有这方面的信息
However there are two problems with this approach first of all I do not know the extension.How do I extract an extension ?
但是这种方法存在两个问题,首先我不知道扩展。如何提取扩展?
The extension can be extracted by using the following code 可以使用以下代码提取扩展名
from PIL import Image
decodedbytes = base64.decodebytes(str.encode(image_content))
image_stream = io.BytesIO(decodedbytes)
image = Image.open(image_stream)
filetype = image.format #Contains the extension
The next thing is Ill have to check for imageA,B,C,D and E if they exist and then save each one individually.
接下来是Ill必须检查imageA,B,C,D和E(如果它们存在)然后单独保存每个。 If I could come up with a dynamic solution close to something that I have that would work as well.
如果我能提出一个动态的解决方案,接近我所拥有的那些也可以工作的东西。 The solution to this was simple to use
解决方案很简单易用
getattr(job_inst, field).save(content=data , name="img"+filetype)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.