2012-02-04 16 views
5

के साथ पारदर्शी पीएनजी आकार बदलना SO पर कुछ समान प्रश्न हैं, लेकिन उनमें से कोई भी वास्तव में मदद नहीं करता है। मूल रूप से मैं एक साधारण png छवि का आकार बदलने के, के रूप में यहाँ देखा कोशिश कर रहा हूँ:पाइथन छवि पुस्तकालय और हेलो प्रभाव

http://media.spiralknights.com/wiki-images/3/3e/Equipment-Proto_Sword_icon.png

मैं एक उपयोगिता जो php में इन छवियों का उपयोग करता है मूल रूप से लागू किया (mmo सर्पिल शूरवीरों, कॉपीराइट तीन अंगूठियों मनोरंजन से), और आकार बदलने वाली उपयोगिता ने पूरी तरह से अच्छी तरह से काम किया। मैंने PHP के दस्तावेज़ में imagecopyresampled पृष्ठ पर वर्णित विधि का उपयोग किया।

ईमानदारी से मैं इसे फ़ोटोशॉप में बेहतर आकार देने के लिए भी नहीं प्राप्त कर सकता, लेकिन परिणाम अजगर में लगभग विनाशकारी हैं। मैं लगातार एक प्रभामंडल प्रभाव प्राप्त करता हूं, और मेरा मानना ​​है कि यह कम से कम पारदर्शी पिक्सेल के वास्तविक आरजीबीए मूल्यों में है। इधर, इस तस्वीर बेहतर बताता है:

resize examples

(पिछले आकार बदलने के लिए दूसरी बस एक सुझाव मैं एक मंच पर देखा पहली करने के लिए दो बार अंतिम आकार आकार बदलने के लिए था, और यह कम से कम मदद एक छोटे से किया था, लेकिन पर्याप्त नहीं)

छवि का आकार बदलने पर पहले ही आरजीबीए मोड में है।

जैसा कि आप देख सकते हैं कि PHP और फ़ोटोशॉप आकार हेलो-मुक्त हैं। ईमानदारी से सबकुछ लेकिन PHP आकार बदलना बहुत अधिक काम करता है, मुझे PHP छवि में न्यूनतम पैलेट पसंद है (यदि आप बड़े संस्करणों को देखते हैं तो आप देख सकते हैं कि PHP आकार का रंग रंगों के बीच कम उपयोग करता है), लेकिन मैं फ़ोटोशॉप के साथ रह सकता था इसका आकार बदल गया है, या यहां तक ​​कि अजगर का आकार भी बदलता है, लेकिन हेलो अस्वीकार्य है।

ऐसा लगता है - और अगर मैं गलत हूं तो मुझे सही करें - PHP और फ़ोटोशॉप को पता चलता है कि अल्पा चैनल में पिक्सल के रंग का उपयोग न करने के दौरान, लेकिन पाइथन उस प्रकाश सीमा का उपयोग कर रहा है, जो इसके आकार में अन्यथा पारदर्शी है।

दुर्भाग्यवश कई अलग-अलग आइकन हैं जिन्हें मुझे अलग-अलग प्रोफाइल के साथ आकार बदलने की आवश्यकता है, इसलिए वे इस परिपत्र के जितना सरल नहीं हैं, लेकिन प्रयोग करने के दौरान यह केवल पहला था जिसका उपयोग मैं कर रहा था।

यह में और स्वयं का एक कोड प्रश्न के ज्यादा नहीं है, लेकिन अगर आप कुछ की जरूरत है तो इस को देखने के लिए सार है:

>> import Image 
>> img = Image.open('swordorig.png') 
>> img 
<PngImagePlugin.PngImageFile image mode=RGBA size=256x256 at 0x2A3AF58> 
>> img.resize((36,36), Image.ANTIALIAS).save('swordresize.png') 

अंततः सवाल किया जा रहा है: वहाँ एक रास्ता जनहित याचिका नहीं बताने के लिए है एक पिक्सेल के रंग का उपयोग करें जिसमें resampling के दौरान 0 का अल्फा है?

+0

पीआईएल नहीं जानते, लेकिन क्या आपने आरजीबीए (आरजीबीए नहीं) का उपयोग करने की कोशिश की ताकि यह छवि को प्रील्टाइप्लाइड अल्फा माना जा सके? – rotoglup

+1

मैं नहीं था, तो सुझाव के लिए धन्यवाद! दुर्भाग्य से ऐसा लगता है कि पीआईएल आरजीबीए को पीएनजी के रूप में लिखने में असमर्थ है। "IOError: मोड आरजीबीए को पीएनजी के रूप में नहीं लिख सकता" – cogs

+0

यदि आपको फ़ोटोशॉप बाइक्यूबिक परिणाम पसंद है, तो शायद 'छवि.बिक्यूबिक' या 'छवि.NEAREST' बेहतर होगा? http://pastebin.com/VRBKWZUh – reclosedev

उत्तर

6

उत्तर देने के लिए सभी को धन्यवाद! और विशेष रूप से मुझे उस शब्द के बारे में बताने के लिए रोटोग्लुप करने के लिए जो मैं वास्तव में खोज रहा था। पीआईएल में प्रीमिलीप्लाइड अल्फा के लिए स्टैक ओवरफ्लो पेजों के माध्यम से जाना मुझे एक समाधान मिला जो काम करता है;

resize sheet 2

धूसर बार सिर्फ क्या वे एक हल्का रंग की पृष्ठभूमि पर कैसा दिखेगा के एक छाप देने के लिए कर रहे हैं: यहां आकार ग्राफिक्स की एक अद्यतन शीट है।

https://stackoverflow.com/a/6882161/1189554

धन्यवाद madlag को

तो मेरी कोड इस तरह की तलाश में समाप्त होता है:

>> import Image, numpy 
>> img = Image.open('swordorig.png') 
>> premult = numpy.fromstring(img.tostring(), dtype=numpy.uint8) 
>> alphaLayer = premult[3::4]/255.0 
>> premult[::4] *= alphaLayer 
>> premult[1::4] *= alphaLayer 
>> premult[2::4] *= alphaLayer 
>> img = Image.fromstring("RGBA", img.size, premult.tostring()) 
>> img.resize((36,36), Image.ANTIALIAS).save('swordresize.png') 

और तुम आइकन चादर के तल पर है कि मिलता है। PHP संस्करण की तुलना में अभी भी अधिक रंग, और एक बहुत ही हल्की अंगूठी, लेकिन कुल मिलाकर, बहुत अच्छी है। मुझे यकीन है कि एल्गोरिदम को और भी बेहतर बनाने के लिए tweaked किया जा सकता है। जवाब देने के लिए सभी को फिर से धन्यवाद!

संबंधित मुद्दे