使用Wand读取和写入上载的文件

时间:2017-12-07 14:39:40

标签: python django django-rest-framework imagemagick wand

这是我的代码:

class ToPng(APIView):
    def post(self, request, *args, **kwargs):

        revision = request.data.get('revision', None)
        file = request.data.get('file', None)

        with tempfile.TemporaryFile() as tmp:
            tmp.write(file.read())
            all_pages = Image(file=tmp)
            single_image = all_pages.sequence[0]
            with Image(single_image) as img:
                img.format = 'png'
                img.background_color = Color('white')
                img.alpha_channel = 'remove'
                MyModel.objects.create(revision=revision, file=img)
                return Response(HTTP_200_OK)

我收到错误:"没有此图像格式的解码代理`' @ error / blob.c / BlobToImage / 353"

显然我犯了一个严重错误,因为安装了imagemagick和ghostscript的魔杖可以立即将Pdf转换为Png。我可能读错了,但我不知道还能做什么。

1 个答案:

答案 0 :(得分:1)

您只需要在读取之前将tempfile重置回文件的开头。

    with tempfile.TemporaryFile() as tmp:
        tmp.write(file.read())
        tmp.seek(0)
        all_pages = Image(file=tmp)

<强>更新

我在一段时间内没有使用,但您应该可以使用InMemoryUploadedFile创建StringIO。来自here

的示例
import StringIO
# ... Skip to after img work ...
img_io=StringIO.StringIO()
img.save(file=img_io)
img_file=InMemoryUploadedFile(img_io,
                              None,
                              'first_page.jpg',
                              'image/jpeg',
                              img_io.len,
                              None)
MyModel.objects.create(revision=revision, file=img_file)