2013-07-26 16 views
13

करने के लिए छवि परिवर्तित मैं निम्नलिखित कोड बेस 64 के लिए छवि परिवर्तित करने के लिए है:बेस 64

private void btnSave_Click(object sender, RoutedEventArgs e) 
    { 
     StreamResourceInfo sri = null; 
     Uri uri = new Uri("Checked.png", UriKind.Relative); 
     sri = Application.GetResourceStream(uri); 

     BitmapImage bitmap = new BitmapImage(); 
     bitmap.SetSource(sri.Stream); 
     WriteableBitmap wb = new WriteableBitmap(bitmap); 

     MemoryStream ms = new MemoryStream(); 
     wb.SaveJpeg(ms, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100); 
     byte[] imageBytes = ms.ToArray(); 

     base64 = System.Convert.ToBase64String(imageBytes); 

    } 

और निम्नलिखित बिटमैप छवि प्रपत्र आधार 64 पाने के लिए कोड: और

public static BitmapImage base64image(string base64string) 
    { 
     byte[] fileBytes = Convert.FromBase64String(base64string); 

     using (MemoryStream ms = new MemoryStream(fileBytes, 0, fileBytes.Length)) 
     { 
      ms.Write(fileBytes, 0, fileBytes.Length); 
      BitmapImage bitmapImage = new BitmapImage(); 
      bitmapImage.SetSource(ms); 
      return bitmapImage; 
     } 
    } 

तो जब मैं कन्वर्ट deconvert यह खाली है

मुझे लगता है कि deconverter काम करता है पता है, क्योंकि जब मैं उसे सटीक स्ट्रिंग दे:

string base64="iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAQAAABLCVATAAACH0lEQVR42q3WoZKrMBQGYGRkIpHEoY9DMrh1nUGtzxPcGV7gCsTaK3iBCqa2ipmrVqLrWrmytjL3nBwoEGD30ja/6JaSj/wp3SEIXjpUoB+Oeg0zpoR+NsyoDVOgi39cbYHAy4MQTc0wOYZepxRBUkn9UxxEiNnXxyYwd6w/438hSddHJilv1tqv664Shle1DeJaJihPV9uNQ+NWBRK2QVSr+GjtaFzOIpdjKFShnoY+Gv0N0u0OVLexY48NQ+68JchdpQu/o1piVMu6faJdwjNWIAYyl55bqGUtbndO53TzCIpUpCkdlEm+V3J3Ir8r3uops2+FkTmvx832IGJwN97xS/5Ti0LQ/WLwtbxMal2ueAwvc2c8CAgSJip5U4+tKHECMlUzq2UcA9EyROuJi6/71dtzWAfVcq0Jw1CsYh13kDDteVoirE+zWtLVinQ8ZAS5YlVlvRHWfi3pakUQL0OOwmp/W/vN6Gt5zBIkzEezxnCtMJsxDIECTYmhp3bej4HHzaalNMyAnzE0UBKp6Z1Do2pwd3JkAH6CxlTs/bZOZ661yMwhohDLQqREMWz8UAvWoUQleggehG5dSPUbv28GJlnKHGJsqPi7vuG/MGTyCGslOtkCOayrGOa/indajdudb6FUpXoepgiLHIIMriddyzrkMBhGAqlOH4U2hKCT2j0NdU8jFbzpZ3LQlh9srPqEQ1Y9lEP2CVa99KHvH8mnrGGdl9V9AAAAAElFTkSuQmCC"; 

कौन सा है मेरी Checked.png ऑनलाइन कनवर्टर में परिवर्तित किया। यह पूरी तरह से decompreses। गलत * क्या मैं गलत किया है -

"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" 

मेरे समस्या यह है कि स्ट्रिंग जो मैं अपने कोड से बेस 64 के रूप में मिलता है:

और ये मेरे बेस 64 है, जो मैं परिवर्तित करके प्राप्त है? *

+0

कृपया अपने बयान करने के लिए सवाल/समस्या को जोड़ने: मैं हाल ही में एक ऐसी ही काम है कि मैं क्या कर रहा था सही दिशा में इंगित कर सकता है, जिसके लिए कुछ कोड लिखा है। अभी तक नमूना में चमकदार रूप से बुरा नहीं है और न ही कोई काम नहीं करता है/आपको क्या त्रुटियां मिलती हैं। –

+0

आपको समस्या कहां मिल रही है या क्या काम नहीं कर रहे हैं? –

+0

आपका क्या मतलब है "गलत"? आपका बाइट अनुक्रम पूरी तरह वैध ** jpg ** एक चेक मार्क की छवि का प्रतिनिधित्व करता है ... –

उत्तर

20

के बारे में क्या कोशिश कर रहा:

public static BitmapImage base64image(string base64string) 
{ 
    byte[] fileBytes = Convert.FromBase64String(base64string); 

    using (MemoryStream ms = new MemoryStream(fileBytes)) 
    { 
     Image streamImage = Image.FromStream(ms); 
     context.Response.ContentType = "image/jpeg"; 
     streamImage.Save(context.Response.OutputStream, ImageFormat.Jpeg); 
     return streamImage; 
    } 
} 

मैं अलेक्सई कि में छवि को पढ़ने के लिए अपने कोड एक छोटे से अजीब दिखता है के साथ सहमत हैं।

 string fileContent = null; 
     /* Check the file actually has some content to display to the user */ 
     if (uploadFile != null && uploadFile.ContentLength > 0) 
     { 
      byte[] fileBytes = new byte[uploadFile.ContentLength]; 
      int byteCount = uploadFile.InputStream.Read(fileBytes, 0, (int)uploadFile.ContentLength); 
      if (byteCount > 0) 
      { 
       fileContent = CreateBase64Image(fileBytes); 
      } 
     } 

    private string CreateBase64Image(byte[] fileBytes) 
    { 
     Image streamImage; 
     /* Ensure we've streamed the document out correctly before we commit to the conversion */ 
     using (MemoryStream ms = new MemoryStream(fileBytes)) 
     { 
      /* Create a new image, saved as a scaled version of the original */ 
      streamImage = ScaleImage(Image.FromStream(ms)); 
     } 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      /* Convert this image back to a base64 string */ 
      streamImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
      return Convert.ToBase64String(ms.ToArray()); 
     } 
    } 
2

कोई जवाब नहीं: एक लंबी टिप्पणी के अधिक ... ओपी का कहना है कि डिकोडिंग कोड पूरी तरह से ठीक काम करता है, यह संदेह भी दिखता है। इसके अलावा कोड PNG छवियाँ पर काम करने के सत्यापित किया जाना माना जाता है, लेकिन बचत कोड स्पष्ट रूप से SaveJpeg कॉल के साथ मान्य JPG पैदा करता है ...


आपका कोड है कि पढ़ने के लिए स्ट्रीम बनाता है अजीब लगता है - आप मौजूदा बाइट सरणी पर स्ट्रीम बनाने, उस धारा में एक ही बाइट्स लिखने से, और वह उस विधि को किसी विधि से 0 तक वापस मांगे बिना पास करता है।

संभावित ठीक (यह मानते हुए BitampImage जेपीजी धारा स्वीकार कर सकते हैं):

  • धारा के रूप में बिल्कुल Write कॉल नहीं करते पहले से ही बाइट्स आप चाहते हैं
  • धारा के लिए लिख के बाद ms.Position = 0 सेट है।

नोट: मुझे यकीन है कि नहीं कर रहा हूँ अगर यह धारा BitmapImage के लिए एक स्रोत है कि निपटान के लिए ठीक है, आप भी using दूर करने के लिए आवश्यकता हो सकती है।

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