首页 > 解决方案 > 如何将 ImageString 转换为 Image Django Rest Framework?

问题描述

我正在使用 Asynchttp 从 android 接收我的图像字符串,并且我想将该图像字符串转换为 Django Rest Framework 中的图像..只需将其转换为不将其存储在 ImageField 中

*模型.py

class Food(models.Model):
label=models.TextField(max_length=200)
link = models.FileField(null=False, blank=False)
Image = models.TextField(link, null=True)

 class Android(models.Model):
label=models.TextField(max_length=200)
imagestring=models.TextField(null=True,blank=True)  //convert this to Image

*序列化器.py

class AndroidSerializers(serializers.HyperlinkedModelSerializer):   
class Meta:
    model = Android
    fields = ('label', 'imagestring')



 class FoodSerializers(serializers.HyperlinkedModelSerializer):
 class Meta:
    model=Food
    fields=('url','label','Image','link')

*视图.py

class FoodViewSet(viewsets.ModelViewSet):
queryset = Food.objects.all()
serializer_class =FoodSerializers

class Androids(viewsets.ModelViewSet):
queryset =Android.objects.all()
serializer_class = AndroidSerializers()

标签: djangodjango-modelsdjango-rest-frameworkdjango-templatesdjango-views

解决方案


您可以使用 PIL 库来处理字符串、图像,反之亦然。

from PIL import Image
from io import BytesIO
import base64
im = Image.open(BytesIO(base64.b64decode(data)))

要在序列化程序中使用它,请创建一个自定义字段

class ImageSerializerField(serializers.Field):
    def to_representation(self, value):
        return value # convert it the way you want to see in json
    def to_internal_value(self, data):
        im = Image.open(BytesIO(base64.b64decode(data)))
        return im
class AndroidSerializers(serializers.HyperlinkedModelSerializer):
    imagestring =  ImageSerializerField() 

    class Meta:
        model = Android
        fields = ('label', 'imagestring')

参考:https ://www.django-rest-framework.org/api-guide/fields/#custom-fields

https://pillow.readthedocs.io/en/stable/
https://github.com/python-pillow/Pillow


推荐阅读