2014-06-04 1 views
0

Je n'essaie pas de lire les données EXIF ​​sur le périphérique ou le serveur, mais les données doivent être présentes sur le serveur.Télécharger l'image sur le serveur avec des données EXIF ​​

J'envoie actuellement l'image au serveur en la convertissant en byte[] puis en base64 Convert.ToBase64(byte[]) et en l'envoyant en utilisant JSON - voir le code ci-dessous. Mais quand je reçois le fichier à l'autre extrémité, il n'a pas de données EXIF. Si j'obtiens l'image de l'émulateur avec la fausse carte SD, les données EXIF ​​existent.

Est-ce que quelqu'un sait comment télécharger l'image et la reconstruire à l'autre extrémité pour que les données EXIF ​​restent intactes?

image pour octets à 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 à octet [] à l'image

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

J'ai modifié votre titre. S'il vous plaît voir, "[Les questions devraient inclure" tags "dans leurs titres?] (Http://meta.stackexchange.com/questions/19190/)", où le consensus est "non, ils ne devraient pas". –

Répondre

1

je devais changer mon code complètement pour couper toute connexion bitmaps ou autre formats, et juste utilisé byte[] à travers elle. Voir le code:

Sur l'application:

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); 

Sur le serveur:

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); 
} 
Questions connexes