2012-01-09 12 views
8

ठीक है, मूल रूप से मैंने एक साधारण छवि अपलोड प्रणाली विकसित की है। उपयोगकर्ता स्थानीय छवि का चयन करता है (HTML5 फ़ाइल/फ़ाइल रीडर एपीआई का उपयोग करके) और परिणाम की पुष्टि करने से पहले इसे फसल करने की क्षमता है।जावा सर्वर पर कैनवास की सामग्री भेजना और इसे छवि के रूप में सहेजना

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

toDataURL के परिणाम फ़ॉर्म में हैं: डेटा: छवि/पीएनजी; बेस 64, एनकोडेड डेटा।

स्ट्रिंग को इसके उचित द्विआधारी प्रतिनिधित्व में बदलने के लिए जावा सर्वर पर मुझे क्या चाहिए?

+1

देखें: http://stackoverflow.com/questions/469695/decode-base64-data-in-java –

+0

संभावित डुप्लिकेट [सर्वर पर 'कैनवास' छवि डेटा अपलोड करना] (http://stackoverflow.com/ प्रश्न/1590965/अपलोडिंग-कैनवास छवि डेटा-टू-सर्वर) –

उत्तर

6

आपको data:image/png;base64, भाग और base 64 decode बाकी को हटाने की आवश्यकता है।

1

एक बार जब आप स्ट्रिंग को बेस 64-डीकोड करते हैं, तो आपके पास एक पीएनजी फ़ाइल के रूप में बाइनरी छवि होगी। बाइट्स में बेस 64 स्ट्रिंग को डीकोड करने के तरीके के विवरण के लिए this SO question देखें। बेस 64, base64Image की शुरुआत से, छवि/png:

5
import java.awt.image.BufferedImage; 
import java.io.ByteArrayInputStream; 
import java.io.File; 
import javax.imageio.ImageIO; 
import javax.xml.bind.DatatypeConverter; 

public class test { 
    public static void main (String[] args){ 
    try{ 
      // remove data:image/png;base64, and then take rest sting 
      String img64 = "64 base image data here"; 
     byte[] decodedBytes = DatatypeConverter.parseBase64Binary(img64); 
     BufferedImage bfi = ImageIO.read(new ByteArrayInputStream(decodedBytes));  
     File outputfile = new File("saved.png"); 
     ImageIO.write(bfi , "png", outputfile); 
     bfi.flush(); 
    }catch(Exception e) 
     { 
      //Implement exception code  
    } 

    } 
} 
0

आप के साथ + अगर आपके base64Image अंतरिक्ष चार है, तो आप डेटा हटाने के लिए स्पेस के स्थान किया है। जब तक आप स्पेस चार को प्रतिस्थापित नहीं करते हैं, तो आपको सही छवि नहीं मिल सकती है। तो आप बेस 64 डीकोड

yourBase64String = yourBase64String.replace ('', '+') का उपयोग कर सकते हैं;

yourBase64String = yourBase64String.substring (22);

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