Дополнение изображения для использования в wxpython - PullRequest
5 голосов
/ 19 декабря 2011

Я ищу наиболее эффективный способ «квадратирования» изображения для использования в качестве значка.Например, у меня есть файл .png, размеры которого 24х20. Я не хочу каким-либо образом изменять часть изображения, просто хочу добавить прозрачные пиксели к краю изображения, чтобы оностановится 24х24.Мои исследования показывают, что мне нужно создать прозрачный холст 24х24, вставить в него свое изображение и сохранить результат.Я работаю в wxpython и хотел знать, сможет ли кто-нибудь помочь мне в этом процессе.Еще лучше, у меня также установлен PIL, и мне было интересно, если бы не было встроенного способа сделать это.Похоже, что эта операция будет выполняться довольно регулярно, но ни один из методов imageops не вполне соответствует требованиям.

Ответы [ 3 ]

3 голосов
/ 19 декабря 2011

Вы можете сделать это с помощью массива 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)
3 голосов
/ 19 декабря 2011

Используйте 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')
1 голос
/ 19 декабря 2011

Вот чистая реализация 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)
...