2012-07-22 20 views
5

को सहेजते समय पिक्सेल मान बदलता है यह जितना आसान हो जाता है। आरजीबी छवि बनाओ, एक पिक्सेल बड़ा। पिक्सेल मान सेट करें (ए, बी, सी)। बचाना। समस्या यह है कि सहेजी गई छवि में एक अलग पिक्सेल मान होता है (ए, बी, सी)। आम तौर पर, चैनलों में से एक पर + -1 के साथ, जैसे कि यह यादृच्छिक शोर था, लेकिन इसके अनुरूप। यहाँ कोड:पीआईएल

from PIL import Image 
newImg = Image.new('RGB', (1,1), "black") 
pixels = newImg.load() 
pixels[0,0] = (0,3,0) 
newImg.save("point.jpg") 
savedImage = Image.open("point.jpg") 
pixelsSaved = savedImage.load() 

print pixels[0,0] 
print pixelsSaved[0,0] 

उत्पादन इस से है: (0, 3, 0) (1, 3, 0)

लगातार।

अगर मैं का उपयोग (4, 2, 0) के रूप में पिक्सेल को बचाने के लिए, उत्पादन होता है: (4, 2, 0) (3, 2, 0)

और (0,10, 0) देता है: (0, 10, 0) (0, 10, 1)

उदाहरण के लिए।

मूल्य बचाने पर मूल्य क्यों बदलता है? मैं इसे कैसे रोकूं? कृपया मदद करे।

धन्यवाद।

उत्तर

6

इसे .png के रूप में सहेजें। .jpg एक हानिकारक संपीड़ित प्रारूप है।

+0

धन्यवाद एक टन आदमी! मैं तुम्हें प्यार करता हूँ!!!! – void

3

जेपीजी आपके इच्छित इरादे से ठीक से स्टोर करने का वादा नहीं करता है। यह फ़ाइल को छोटा बनाने के लिए आपके डेटा को संपीड़ित करता है, और संपीड़न मानव धारणा पर आधारित होता है। विचार पिक्सेल की एक सरणी बनाना है जो मानव के समान दिखाई देता है, भले ही वे अलग-अलग पिक्सल हों।

तो आपके द्वारा लिखे गए पिक्सेल आउटपुट में हैं, लेकिन आसन्न पिक्सल को पूरी छवि को कम जगह में स्टोर करने में सक्षम होने के लिए बदल दिया गया है। इसे "हानिकारक संपीड़न" कहा जाता है क्योंकि डेटा खो जाता है।

अन्य छवि प्रारूपों में इस संपत्ति नहीं है। पीएनजी एक लापरवाह संपीड़ित प्रारूप है, जिसका अर्थ है कि एक ही पिक्सेल एक संपीड़ित पीएनजी को डिकंप्रेस करने के बाद परिणाम देगा। यदि आप अपनी छवि को पीएनजी के रूप में सहेजते हैं, तो आपके पास इच्छित परिणाम होगा।

+0

आप लोग खूनी शानदार हैं! धन्यवाद! – Ethan

+0

हाँ आप लोग खूनी खूनी शानदार हैं .. इस बारे में नहीं सोचा .. आह धन्यवाद! – void