क्यों जावा ImageIO सपाट जेपीईजी रंग

वोट
10

जब मैं कुछ जेपीजी फ़ाइलों को पढ़ने, रंग चपटा कर रहे हैं। यहाँ एक सरल उदाहरण वह jpg पढ़ता है और सिर्फ एक और फाइल करने के लिए एक ही छवि लिखते है।

import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class JPegReadTest {
    public static void main(String[] args) {
        if (args.length == 2) {
            try {
                BufferedImage src = ImageIO.read(new File(args[0]));
                ImageIO.write(src, jpg, new File(args[1]));
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            System.err.println(Usage: java JPegReadTest src dest);
        }
    }
}

आप उदाहरण के लिए के साथ इस प्रयास करें http://www.flickr.com/photos/visualpanic/233508614/sizes/l/ , गंतव्य छवि के रंग स्रोत फ़ाइल से भिन्न होते हैं। ऐसा क्यों है? इसे कैसे जोड़ेंगे?

इसके अलावा png के रूप में छवि को बचाने की कोशिश की, लेकिन रंग उस में गुदगुदा रहे हैं, भी (ताकि रंग जानकारी संभालने है ठीक से पढ़ नहीं)।

13/08/2009 को 13:32
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


5 जवाब

वोट
10

यह कई कारणों से हो सकता है।

  1. जेपीईजी रंग डेटा अक्सर आरजीबी के बजाय YCrCb के रूप में संग्रहीत किया जाता है, हालांकि रूपांतरण ज्यादातर unnoticeable होना चाहिए।
  2. जेपीईजी अक्सर एक एम्बेडेड रंग प्रोफ़ाइल है, लेकिन कई अनुप्रयोगों इस समझ में नहीं आता और बस इसे अनदेखा (इस स्थिति में, अपने आउटपुट फ़ाइल रंग प्रोफ़ाइल लापता हो सकता है)।
  3. गामा मूल्य रीसेट या लापता हो सकता है जावा यह mangles के बाद।

मैं वास्तव में अपने उदाहरण की कोशिश नहीं की है ... आप दोनों से पहले और फ़ाइलों के बाद पोस्ट करें सकता है? वास्तव में परिणाम फ़ाइल का परीक्षण करने में सक्षम होने के बिना, यह अगर यह अतिरिक्त डेटा वहाँ है या नहीं बताने के लिए मुश्किल है।

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

13/08/2009 को 13:44
का स्रोत उपयोगकर्ता

वोट
2

शायद अपने स्रोत छवि एक सरगम ​​व्यापक sRGB से, और अपने लोड (एडोब आरजीबी की तरह) / सहेजें चक्र colorspace जानकारी संरक्षण नहीं है के साथ एक नियत रंग प्रोफ़ाइल है? कोई रंग प्रोफाइल के साथ, अपने दर्शक sRGB समझेंगे, और संकुचित सरगम ​​सब कुछ "blah" देखो कर देगा। आप exiftool है,

exiftool -ProfileDescription filename.jpg

एक त्वरित तरीका है अपने स्रोत और उत्पादन चित्र पर रंग प्रोफाइल सत्यापित करने के लिए है।

13/08/2009 को 15:15
का स्रोत उपयोगकर्ता

वोट
0

यहाँ कि ImageIO इंटरफेस पर फैलता स्रोत कोड के साथ एक लिंक है - आप गुणवत्ता और संपीड़न मानकों को बदल सकते हैं जब एक छवि लिख .... http://www.universalwebservices.net/web-programming-resources/java/adjust- jpeg छवि संपीड़न गुणवत्ता-जब बचत-छवियों-जावा में

18/01/2013 को 01:29
का स्रोत उपयोगकर्ता

वोट
0

जेपीईजी एक है हानिपूर्ण प्रारूप।

इसका मतलब है कि अगर आप एक फ़ाइल को खोलने और इसे फिर से बचाने के लिए आपको कुछ जानकारी खो जब तक आप को खोना नहीं किसी भी (इस स्थिति में संभव जोड़तोड़ बहुत ही सीमित हैं) बहुत विशिष्ट कदम उठाएंगे।

इसके अतिरिक्त ImageIO.write()शायद जेपीईजी फ़ाइलें, जो मूल है, जो गुणवत्ता के एक अतिरिक्त नुकसान हो जाएगा की तुलना में कम हो सकता है को बचाने के लिए कुछ डिफ़ॉल्ट गुणवत्ता सेटिंग्स का उपयोग करता।

एक PNG फ़ाइल को सहेजने का प्रयास करें और आप देखेंगे कि यह स्रोत के रूप में ही दिखाई देगा देखेंगे।

13/08/2009 को 13:47
का स्रोत उपयोगकर्ता

वोट
0

jpeg एक हानिपूर्ण प्रारूप है। जब ज्यादा एक बीएमपी की तरह एक कच्चे प्रारूप के रूप में में पढ़ा, जावा भंडार यह। तो यह फिर से डेटा हानि के कारण बाहर लिखा जा रहा है। इसके अलावा, वहाँ जब GIMP की तरह कुछ का उपयोग कर की तरह गुणवत्ता पर अधिक नियंत्रण नहीं है।

हो सकता है कि जैसे अन्य APIs का उपयोग करने पर गौर छवि Magick आप गुणवत्ता पर अधिक नियंत्रण देने के लिए।

13/08/2009 को 13:45
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more