2011-12-19 65 views
5

私は、画像をアイコンとして使用するための最も効率的な方法を探しています。たとえば、サイズが24x20の.pngファイルがあります。イメージの「イメージ」部分を変更したくない場合は、イメージの端に透明ピクセルを追加するだけです24x24になります。私の研究では、24x24の透明キャンバスを作成し、これに画像を貼り付けて結果を保存する必要があることを示唆しています。私はwxpythonで作業しており、誰もがプロセスを通して私を導くことができるのだろうかと思っていました。さらに良いことに、私もPILをインストールしてあり、これを組み込む方法がないのだろうかと思っていました。それはかなり定期的に行われる操作のようですが、画像処理方法のどれもが法案にはまったく適合しません。wxpythonで使用する画像の埋め込み

答えて

3

使用image.paste透明の背景に画像を貼り付ける:

import Image 
FNAME = '/tmp/test.png' 
top = Image.open(FNAME).convert('RGBA') 
new_w = new_h = max(top.size) 
background = Image.new('RGBA', size = (new_w,new_h), color = (0, 0, 0, 0)) 
background.paste(top, (0, 0)) 
background.save('/tmp/result.png') 
+0

私が既にインストールしたPILを使用しているため、これはnumpyアプローチに対する答えとして受け入れています。助けてくれてありがとう。 –

3

あなたはかなり簡単numpyの配列でそれを行うことができます。これ

import matplotlib.pyplot as plt 
import numpy as np 
im1 = plt.imread('your_im.png') 
im0 = np.zeros((24, 24, 4), dtype=im1.dtype) 
im0[2:-2,:,:] = im1 
plt.imsave('your_new_im.png', im0) 
+0

良いアイデア。 'scipy.pad'を使うことができます。特に2行だけでない場合は特にそうです。 – Mark

1

のようなものがここに純粋なwxPythonの実装です。

import wx 

app = wx.PySimpleApp() 

# load input bitmap 
bitmap = wx.Bitmap('input.png') 

# compute dimensions 
width, height = bitmap.GetSize() 
size = max(width, height) 
dx, dy = (size - width)/2, (size - height)/2 

# create output bitmap 
new_bitmap = wx.EmptyBitmap(size, size) 
dc = wx.MemoryDC(new_bitmap) 
dc.SetBackground(wx.Brush(wx.Colour(255, 0, 255))) 
dc.Clear() 
dc.DrawBitmap(bitmap, dx, dy) 
del dc 

# save output 
image = wx.ImageFromBitmap(new_bitmap) 
image.SetMaskColour(255, 0, 255) 
image.SaveFile('output.png', wx.BITMAP_TYPE_PNG) 
関連する問題