PIL存储到pdf中

在做实验的过程中,往往需要将图片和预测的内容输出,从而对模型的的性能有更好的判断。

如果将训练集所有图片都放到jupyter中,肯定是放不下的,就算放下了浏览器也会卡死。所以我想将预测的图片和一些测试需要的文字提取放到pdf中去。
参考:stackoverflowuser guide 第5.2节
官方文档给出的例子只能从文件到pdf

from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.rl_config import defaultPageSize
from reportlab.lib.units import inch


import PIL
import os
from PIL import Image as PILimage
from io import StringIO
from io import BytesIO

PAGE_HEIGHT=defaultPageSize[1]; PAGE_WIDTH=defaultPageSize[0]
styles = getSampleStyleSheet()
Title = "Hello world"
pageinfo = "platypus example"

def myFirstPage(canvas, doc):
    canvas.saveState()
    canvas.setFont('Times-Bold',16)
    canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-108, Title)
    canvas.setFont('Times-Roman',9)
    canvas.drawString(inch, 0.75 * inch, "First Page / %s" % pageinfo)
    canvas.restoreState()

def myLaterPages(canvas, doc):
    canvas.saveState()
    canvas.setFont('Times-Roman',9)
    canvas.drawString(inch, 0.75 * inch, "Page %d %s" % (doc.page, pageinfo))
    canvas.restoreState()

def go():
    doc = SimpleDocTemplate("test.pdf")
    Story = [Spacer(1,2*inch)]
    style = styles["Normal"]

    pngs = [x for x in  os.listdir(保存图片的文件夹路径) if 'png' in x]
    for i in pngs:
        txt = os.path.join(预测结果的路径, i.replace('.png','.txt'))
        png = os.path.join(保存图片的文件夹路径, i)
        f = open(txt, 'r')
        s = str(f.readlines())
        bogustext = s
        p = Paragraph(bogustext, style)
        Story.append(p)
        
        # png = cv2.imread(png)
        # 从PIL保存到PDF,在不适合从文件读取图片的场景中可以使用
        img2 = BytesIO()
        pil = PIL.Image.open(png)
        pil.save(img2, 'PNG')
        img2.seek(0)
        Story.append(Image(img2))
        Story.append(Spacer(1,0.2*inch))
    doc.build(Story, onFirstPage=myFirstPage, onLaterPages=myLaterPages)

if __name__ == '__main__':
    go()

在reportlab中,是可以直接从文件读取图片的,不需要使用pil这个步骤,但是我们在实际使用图片的时候,往往不一定会从文件读取,因为数据增强时会涉及到图片变形,所以希望能够直接从内存保存到图片中。这里给出的示范可以将PIL转到pdf中。
PIL本身就可以保存到pdf

imglist[0].save('test.pdf',  resolution=100.0, all_save=True, append_images = imglist[1:])`

但是我在用这个代码的时候不管怎么改它都只能保存一张图片,就放弃了这种方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值