2012-01-19 9 views
6

मेरे पास एक छवि को बाइट सरणी में बदलने के लिए कोड का नीचे का टुकड़ा है।जावा छवि को बाइट सरणी आकार के मुद्दों में कनवर्ट करें

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageIO.write(image, "png", baos); 
baos.flush(); 
byte[] imageBytes = baos.toByteArray(); 
baos.close(); 

मुझे जिस मुद्दे का सामना करना पड़ रहा है वह यह है कि छवि का आकार लगभग 2.65 एमबी है। हालांकि, imageBytes.length मुझे 5.5 एमबी से अधिक मूल्य दे रहा है। क्या कोई मुझे बता सकता है कि मैं गलत कहां जा रहा हूं?

+1

आप कैसे जानते हैं कि आकार 2.65MB के आसपास है? क्या आप परिणामस्वरूप बाइट खोल सकते हैं? क्या यह ठीक दिखता है? – Thilo

+1

क्या आप वाकई इनपुट छवि पीएनजी प्रारूप में हैं? – Perception

+0

@ थिलो - छवि मेरी स्थानीय मशीन से अपलोड की गई छवि है। मैंने अपनी स्थानीय मशीन और सर्वर दोनों पर फ़ाइल की जांच की। इसका आकार 2.65 एमबी है। मैं BufferedImage छवि = ImageIO.read (inputFile) का उपयोग कर रहा हूँ; फ़ाइल से छवि ऑब्जेक्ट बनाने के लिए। हां, बाइट [] संग्रहीत आकार के अलावा ठीक दिखता है। –

उत्तर

4

पीएनजी हमेशा एक वफादार राउंड-ट्रिप प्रारूप नहीं होता है। इसके संपीड़न alghoritm विभिन्न परिणाम पैदा कर सकते हैं।

संपादित करें: जेपीईजी पर भी लागू होता है।

2

मैंने समस्या को ठीक करने के लिए नीचे दिए गए कोड का उपयोग किया।

FileInputStream fis = new FileInputStream(inputFile); 

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
byte[] buf = new byte[1024]; 
try { 
    for (int readNum; (readNum = fis.read(buf)) != -1;) { 
     bos.write(buf, 0, readNum); 
    } 
} catch (Exception ex) { 

} 
byte[] imageBytes = bos.toByteArray(); 

सौजन्य: http://www.programcreek.com/downloads/convert-image-to-byte.txt यह काम करने ठीक लग रहा है। यदि आप में से कोई भी इस दृष्टिकोण में कोई समस्या देखता है तो कृपया मुझे बताएं।