2015-04-16 44 views
4

我試圖找出一種方法來自動化png格式以添加標題字幕和帶有徽標圖像和源代碼的頁腳欄。我想用python來完成這個圖像格式,因爲我對這種語言最熟悉。我正在尋找一些方向來說明哪些模塊可以很好地用於這樣的事情?理想情況下,該腳本的用戶對此過程看起來像這樣。使用python自動化png格式

1)用戶將有一個看起來是這樣的一個PNG圖像:

enter image description here

2)用戶將啓動腳本:

python autochart_formatting.py 

3)腳本會提示用戶輸入以下信息:

  • 輸入圖表標題:
  • 輸入圖表副標題:
  • 輸入源:
  • 調查名稱:
  • 樣本n =:
  • 輸入路徑,以圖表爲png你想要的格式:
  • 輸入要格式化的路徑圖像保存:

3)使用該信息PNG將與被格式化爲看起來像這樣:

enter image description here

回答

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

似乎是這個腳本的一些問題。我認爲h和w通過腳本被定義爲高度和寬度,以 – moku

+0

@moku啊開頭,對不起,只要將它們改爲'w,h'我會更新我的答案。 –

+0

我改變了他們,並拋出一個錯誤有關ImageFont.py文件: – moku

0

這完全在Pillow(仍在維護的Python成像庫的一個分支)的能力範圍內。

如果你不想推出你自己的圖形代碼,你也可以用matplotlib來做到這一點。它會讓你在圖形格式化方面略微缺乏靈活性,但創建速度會更快。

+0

好我會檢查枕頭。 Matplotlib是一種可能性,但並不是每個人都有這方面的技能。一些圖表圖像將來自Excel,並保存爲PNG,並需要按照這種方式進行格式化。 Pillow將如何處理與導入的png不同的尺寸差異?這會是一個麻煩,還是應該只是像3個標準的圖像大小,它可以格式化,以簡化事情? – moku

+0

我看到了 - 我不明白你的問題,你只是修改圖表 - 我以爲你是從頭創建它們。在那種情況下,是的,你需要枕頭,而不是matplotlib。枕頭是一個通用的圖像處理模塊,因此非常靈活。 – Brionius

+0

枕頭是完全有能力調整您的圖像,如果這就是你的意思。或者,如果你問如何添加標題,如果圖表是不同的大小......我不能幫助,除非你更具體地描述約束。 – Brionius