使用python自动化png格式

时间:2015-04-16 15:04:34

标签: python image

我试图找到一种方法来自动格式化png以添加标题字幕和带有徽标图像和来源的页脚栏。我想用python做这个图像格式化,因为我最熟悉那种语言。我在这里寻找一些方向,哪些模块可以用于这样的东西?理想情况下,对于脚本用户来说,该过程看起来就像这样。

1)用户的png图像看起来像这样:

enter image description here

2)用户将启动脚本:

python autochart_formatting.py

3)脚本会提示用户输入以下信息:

  • 输入图表标题:
  • 输入图表字幕:
  • 输入来源:
  • 调查名称:
  • 样本n =:
  • 输入要格式化的图表png的路径:
  • 输入要保存格式化图像的路径:

3)使用该信息,png将被格式化为看起来像这样:

enter image description here

2 个答案:

答案 0 :(得分:1)

Pillow (the maintained successor to PIL: Python Imaging Library)可以完全按照您的要求处理。

您可以在检索用户输入后扩展图像并放置文本。以下是添加标题的示例:

from PIL import Image, ImageFont, ImageDraw

img = Image.open('my_chart.png')
w,h= img.size

# put pixels into 2D array for ease of use
data = list(img.getdata())
xy_data = []
for y in xrange(h):
    temp = []
    for x in xrange(w):
        temp.append(data[y*w + x])
    xy_data.append(temp)

# get the title
title = raw_input("Title:")

# load the font
font_size = 20
font = ImageFont.truetype("/path/to/font.ttf",font_size)

#  Get the required height for you images
height_needed = font.getsize(title)[1] + 2  # 2 px for padding

# get the upperleft pixel to match color
bg = xy_data[0][0]

# add rows to the data to prepare for the text
xy_data = [[bg]*w for i in range(height_needed+5)] + xy_data  # +5 for more padding

# resize image
img = img.resize((w,h+height_needed+5))

# convert data back to 1D array
data = []
for line in xy_data:
    data += line

# put the image back in the data
img.putdata(data)

# get the ImageDraw item for this image
draw = ImageDraw.Draw(img)

# draw the text
draw.text((5,0),title,font=font,fill=(0,0,0))  # fill is black

img.save('titled_plot.png')

答案 1 :(得分:0)

这完全在Pillow(仍在维护的Python成像库的分支)的功能范围内。

如果您不想滚动自己的图表代码,也可以使用matplotlib执行此操作。它会使您在图表格式化方面的灵活性略微降低,但创建起来会更快。