पीआईएल में (और अधिकतर सभी सॉफ्टवेयर/librairies जो libjpeg का उपयोग करते हैं) गुणवत्ता सेटिंग क्वांटिज़ेशन टेबल (ref.) बनाने के लिए उपयोग की जाती है। Libjpeg में गुणवत्ता संख्या "स्केल" नमूना तालिका मान (जेपीईजी विनिर्देश अनुभाग K.1 से)। अन्य librairies में विभिन्न गुणों को अलग-अलग गुणों को निर्दिष्ट किया जाता है (उदा .: फ़ोटोशॉप, डिजिटल कैमरा)।
तो, अन्य शब्दों में, क्वांटिज़ेशन टेबल के बराबर गुणवत्ता, इसलिए यह केवल एक संख्या अधिक जटिल है।
यदि आप अपनी संशोधित छवियों को एक ही "गुणवत्ता" के साथ सहेजना चाहते हैं, तो आपको केवल उसी मात्राकरण तालिका का उपयोग करने की आवश्यकता है। सौभाग्य से, प्रत्येक जेपीईजी में मात्राकरण तालिका को एम्बेड किया गया है। दुर्भाग्य से, पीआईएल में सहेजते समय क्वांटिज़ेशन टेबल निर्दिष्ट करना संभव नहीं है। cjpeg
, कमांड लाइन उपयोगिताओं जो libjpeg के साथ आती हैं, वह कर सकती हैं।
from subprocess import Popen, PIPE
from PIL import Image, ImageFilter
proc = Popen('%s -sample 1x1 -optimize -progressive -qtables %s -outfile %s' % ('path/to/cjpeg', '/path/ta/qtable', 'out.jpg'), shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
P = '6'
if im.mode == 'L':
P = '5'
stdout, stderr = proc.communicate('P%s\n%s %s\n255\n%s' % (P, im.size[0], im.size[1], im.tostring()))
आप जिस तरह से मूल jpeg से परिमाणीकरण तालिका को निकालने के लिए खोजने की जरूरत होगी:
यहाँ कुछ किसी न किसी तरह कोड है कि एक निर्दिष्ट परिमाणीकरण मेज के साथ एक jpeg को बचाने के लिए है।
djpeg -verbose -verbose image.jpg > /dev/null
तुम भी आवश्यकता होगी खोजने के लिए और नमूना सेट करने के लिए: djpeg
कि (libjpeg का हिस्सा) कर सकते हैं। उस चेक here पर अधिक जानकारी के लिए। तुम भी पर test_subsampling
अद्यतन
मैं सबसैम्पलिंग या परिमाणीकरण टेबल या दोनों जब जेपीईजी बचत निर्दिष्ट करने के लिए संभावना को जोड़ने के लिए एक जनहित याचिका कांटा किया देख सकते हैं। सहेजते समय आप quality='keep'
भी निर्दिष्ट कर सकते हैं और छवि को उसी क्वांटिज़ेशन टेबल के साथ सहेजा जाएगा और मूल के रूप में subsampling (मूल रूप से एक जेपीईजी होना आवश्यक है)। कुछ प्रीसेट (फ़ोटोशॉप पर आधारित) भी हैं जिन्हें आप सहेजते समय गुणवत्ता में पारित कर सकते हैं। My fork.
अद्यतन 2
मेरे कोड अब Pillow 2.0 का हिस्सा है। तो बस कार्य करें:
pip install Pillow
प्रासंगिक जानकारी: http://superuser.com/questions/62730/how-to-find-the-jpg-quality/91083#91083 – unutbu
सामान्य यह सटीक ठीक करने के लिए संभव नहीं है में एक जेपीईजी फ़ाइल को संपीड़ित करने के लिए उपयोग की जाने वाली गुणवत्ता मान क्योंकि संग्रहित जानकारी को कम करने के विभिन्न तरीके हैं और गुणवत्ता मान केवल एन्कोडर के लिए दिशानिर्देश है, लेकिन @unutbu बताते हैं, कुछ सॉफ़्टवेयर एक वीर अनुमान लगा सकते हैं। – andrewmu
यह शायद उल्लेखनीय है कि जेपीईजी एक हानिकारक प्रारूप है, इसलिए छवि को खोलने और सहेजने से छवि गुणवत्ता में कमी आएगी, भले ही "गुणवत्ता" विकल्प एक ही मूल्य पर सेट हो। –