2011-12-19 23 views
5

में उपयोग के लिए एक छवि पैडिंग मैं आइकन के रूप में उपयोग के लिए एक छवि 'वर्ग' करने का सबसे प्रभावी तरीका ढूंढ रहा हूं। उदाहरण के लिए, मेरे पास एक .png फ़ाइल है जिसका आयाम 24x20 है। मैं किसी भी तरह से छवि के 'छवि' भाग को बदलना नहीं चाहता, मैं बस छवि के किनारे पर पारदर्शी पिक्सल जोड़ना चाहता हूं ताकि यह 24x24 बन जाता है। मेरे शोध से पता चलता है कि मुझे एक पारदर्शी कैनवास 24x24 बनाने की आवश्यकता है, मेरी छवि को इस पर पेस्ट करें, फिर परिणाम सहेजें। मैं wxpython में काम कर रहा हूं और सोच रहा था कि कोई भी प्रक्रिया के माध्यम से मुझे मार्गदर्शन कर सकता है। बेहतर अभी तक, मेरे पास पीआईएल भी स्थापित है, और यह सोच रहा था कि ऐसा करने का कोई अंतर्निहित तरीका नहीं है। ऐसा लगता है कि इस तरह के ऑपरेशन की तरह काफी नियमित रूप से किया जाएगा, लेकिन छवियों में से कोई भी विधि बिल के अनुरूप नहीं है।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

इसे निष्क्रिय दृष्टिकोण पर उत्तर के रूप में स्वीकार कर लिया है क्योंकि यह पीआईएल का उपयोग करता है, जिसे मैंने पहले ही इंस्टॉल कर लिया है। सहायता के लिए धन्यवाद। –

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)