matplotlib使用pdfpages savefig dpi设置pdf光栅分辨率

时间:2014-02-19 17:10:30

标签: python pdf matplotlib

我有一个项目,使用matplotlib生成一组图表,并将每个图表导出为单独的PNG文件。客户端还希望将图表组输出为单个PDF文件。我们已成功使用PIL Image和matplotlib PdfPages在单独的页面上导入每个PNG并导出多页PDF,但PDF输出质量是不可接受的。如果我使用savefig使用除dpi = 100以外的任何内容,则输出为空。有关如何导出具有更高光栅分辨率的PDF的任何建议吗?

  pp = PdfPages(filepath+'Treatment Zone Charts.pdf')

  for file in os.listdir(filepath):
      if "Treatment Zone Charts" in file and file.endswith(".png"):
          print filepath+file

          #read PNG image
          im = Image.open(filepath+'/'+file)
          im = im.resize((1100,850),Image.ANTIALIAS)

          im = np.array(im).astype(np.float) / 255

          # Create a figure with size w,h tuple in inches
          fig = Figure(figsize=(11,8.5))
          # Create a canvas and add the figure to it.
          canvas = PDF_FigureCanvas(fig)

          #add image to plot
          fig.figimage(im, 0, -220, zorder = 1)

          # Save the Plot to the PDF file
          pp.savefig(fig, dpi=100)

  #close the PDF file after the last plot is created
  pp.close()

1 个答案:

答案 0 :(得分:0)

输出为空白,因为图像位于画布之外。对于dpi = 200并且没有调整原始图像的大小,我们需要将figimage修改为:

          fig.figimage(im, 0, -1080, zorder = 1)

输出对y值非常敏感,从-1080稍微改变,图像放在页面的顶部或底部。我不明白为什么dpi设置会对figimage y参数产生这种影响,但现在这会产生质量好的PDF输出。