使用python自动设置png格式

使用python自动设置png格式,python,image,Python,Image,我正试图找到一种方法来自动设置png的格式,添加标题、字幕和带有徽标图像和源代码的页脚栏。我想用python进行图像格式化,因为我最熟悉python语言。我在这里寻找一些方向,关于什么模块适合用于这样的东西?理想情况下,对于脚本用户来说,该过程应该是这样的 1) 用户将有一个类似以下内容的png图像: 2) 用户将启动脚本: python autochart_formatting.py 3) 脚本将提示用户输入以下信息: 输入图表标题: 输入图表字幕: 输入来源: 调查名称: 样本n=:

我正试图找到一种方法来自动设置png的格式,添加标题、字幕和带有徽标图像和源代码的页脚栏。我想用python进行图像格式化,因为我最熟悉python语言。我在这里寻找一些方向,关于什么模块适合用于这样的东西?理想情况下,对于脚本用户来说,该过程应该是这样的

1) 用户将有一个类似以下内容的png图像:

2) 用户将启动脚本:

python autochart_formatting.py
3) 脚本将提示用户输入以下信息:

  • 输入图表标题:
  • 输入图表字幕:
  • 输入来源:
  • 调查名称:
  • 样本n=:
  • 输入要格式化的图表png的路径:
  • 输入保存格式化图像的路径:
3) 有了这些信息,png的格式将如下所示:


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

如果不想使用自己的图形代码,也可以使用。它会使您在图形的格式设置方面稍微缺乏灵活性,但创建起来会更快。

可以准确地处理您想要的内容

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

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')

太好了,我去看看枕头。Matplotlib是一种可能性,但不是每个人都有这样的技能。一些图表图像将来自Excel并保存为png,需要以这种方式格式化。枕头将如何处理与进口PNG的尺寸差异?这是一个麻烦还是应该有3个标准的图像大小,它可以格式化以简化事情?我明白了-我从你的问题中不明白你只是在修改图表-我以为你是从头开始创建的。在这种情况下,是的,你需要的是枕头,而不是床垫。枕头是一个通用的图像处理模块,所以它非常灵活。枕头完全可以调整你的图像大小,如果这是你的意思的话。或者,如果你问如果图表大小不同,如何添加标题……除非你更具体地描述约束条件,否则我无法帮助你。没错,我想我到了那里后,我只需要越过那座桥,潜入枕头,看看它能做些什么!这个脚本似乎有一些问题。我认为h和w在脚本中定义为开始时的高度和宽度with@moku啊,是的,对不起,只要将它们更改为
w,h
我将更新我的答案。我更改了它们,它引发了一个关于ImageFont.py文件的错误:回溯(上次调用):文件“HubbleFormatter.py”,第20行,在font=ImageFont.truetype中(“/Users/kyle/Destop/GothamFonts/GOTHMBOK.ttf”,font_size)File“/usr/local/lib/python2.7/site packages/PIL/ImageFont.py”,第262行,在truetype return FreeTypeFont(字体、大小、索引、编码)文件中“/usr/local/lib/python2.7/site packages/PIL/ImageFont.py”,第142行,在init self.font=core.getfont(字体、大小、索引、编码)IOError:无法打开resource@moku你需要指定一个字体文件,我不知道你的计算机,所以我无法在那里设置字体文件的实际路径。