这是我的代码:
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。我可能读错了,但我不知道还能做什么。
答案 0 :(得分:1)
您只需要在读取之前将tempfile重置回文件的开头。
with tempfile.TemporaryFile() as tmp:
tmp.write(file.read())
tmp.seek(0)
all_pages = Image(file=tmp)
<强>更新强>
我在一段时间内没有使用django,但您应该可以使用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)