Sto cercando il modo più efficiente per "quadrare" un'immagine da utilizzare come icona. Ad esempio, ho un file .png le cui dimensioni sono 24x20. Non voglio modificare la parte dell'immagine dell'immagine in alcun modo, voglio solo aggiungere pixel trasparenti al bordo dell'immagine in modo che diventa 24x24. La mia ricerca suggerisce che ho bisogno di creare una tela trasparente 24x24, incollare la mia immagine su questo, quindi salvare il risultato. Sto lavorando su wxpython e mi chiedevo se qualcuno potesse guidarmi attraverso il processo. Meglio ancora, ho anche installato PIL, e mi chiedevo se non esistesse un modo integrato per farlo. Sembra che il tipo di operazione possa essere eseguita abbastanza regolarmente, ma nessuno dei metodi imageops è abbastanza adatto.Riempimento di un'immagine per l'uso in wxpython
5
A
risposta
3
Usa image.paste incollare l'immagine su uno sfondo trasparente:
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')
3
si potrebbe fare con l'allineamento NumPy abbastanza facile .. qualcosa di simile
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
Buona idea. Puoi usare 'scipy.pad', specialmente se non sono solo 2 righe. – Mark
1
Ecco un'implementazione pura 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)
hanno accettato questo come la risposta rispetto all'approccio NumPy perché utilizza PIL, che ho già installato. Grazie per l'aiuto. –