2014-06-04 63 views
0

我不想讀取設備或服務器上的EXIF數據,但數據需要存在於服務器上。使用EXIF數據將映像上傳到服務器

我目前正在通過將圖像轉換爲byte[],然後轉換爲base64 Convert.ToBase64(byte[])並使用JSON發送圖像 - 請參閱下面的代碼。

但是當我在另一端得到文件時,它沒有任何EXIF數據。如果我使用假SD卡從仿真器上獲取圖像,則會存在EXIF數據。

有誰知道如何上傳圖像,然後在另一端重建它,以便EXIF數據保持不變?

圖像到字節爲Base64到JSON

BitmapImage image = new BitmapImage(); 
image.SetSource(e.ChosenPhoto); 
image = ResizeImage(image); 
byte[] imageBytes; 
using (MemoryStream ms = new MemoryStream()) 
{ 
    WriteableBitmap btmMap = new WriteableBitmap(image); 
    System.Windows.Media.Imaging.Extensions.SaveJpeg(btmMap, ms, image.PixelWidth, Image.PixelHeight, 0, 100); 
    image = null; 
    imageBytes = ms.ToArray(); 
} 
Base64Image imagestring = new Base64Image(); 
imagestring.imagestring = Convert.ToBase64String(imageBytes); 
string json = JsonConvert.SerializeObject(imagestring); 

JSON爲Base64爲byte []到圖像

using (StreamReader sr = new StreamReader(inputStream)) 
{ 
    postData = sr.ReadToEnd(); 
} 
JavaScriptSerializer deserializer = new JavaScriptSerializer(); 
Dictionary<string, object> jsonObjects = (Dictionary<string, object>)deserializer.DeserializeObject(postData); 
string base64image = jsonObjects["imagestring"].ToString(); 
byte[] imagebytes = Convert.FromBase64String(base64image); 
BitmapImage bitmapImage = new BitmapImage(); 
MemoryStream ms = new MemoryStream(imagebytes); 
bitmapImage.BeginInit(); 
bitmapImage.CacheOption = BitmapCacheOption.OnDemand; 
bitmapImage.CreateOptions = BitmapCreateOptions.None; 
bitmapImage.Rotation = Rotation.Rotate0; 
bitmapImage.StreamSource = ms; 
bitmapImage.EndInit(); 
bitmapImage.CreateOptions = BitmapCreateOptions.None; 
WriteableBitmap wBmp = new WriteableBitmap(bitmapImage); 
var encoder = new JpegBitmapEncoder(); 
encoder.Frames.Add(BitmapFrame.Create(wBmp)); 
+1

我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

1

我不得不完全改變我的代碼切出至位圖或其他任何連接格式,並通過它使用byte[]。見代碼:

在應用:

ImageData imagedata = new ImageData(); 
byte[] imagebytes = new byte[e.ChosenPhoto.Length]; 
e.ChosenPhoto.Read(imagebytes, 0, int.Parse(e.ChosenPhoto.Length.ToString())); 
imagedata.imagestring = Convert.ToBase64String(imagebytes); 
string json = JsonConvert.SerializeObject(imagedata); 

在服務器:

JavaScriptSerializer deserializer = new JavaScriptSerializer(); 
deserializer.MaxJsonLength = 50000000; 
Dictionary<string, object> jsonObjects = (Dictionary<string, object>)deserializer.DeserializeObject(postData); 
string base64image = jsonObjects["imagestring"].ToString();    
byte[] imagebytes = Convert.FromBase64String(base64image); 
Guid imagename = Guid.NewGuid(); 
if (!Directory.Exists(EM.ImagePath)) 
    Directory.CreateDirectory(EM.ImagePath); 
using (FileStream sw = new FileStream(EM.ImagePath + imagename + ".jpg", FileMode.CreateNew)) 
{ 
    sw.Write(imagebytes, 0, imagebytes.Length); 
} 
相關問題