【问题标题】:Upload Image to server with EXIF data使用 EXIF 数据将图像上传到服务器
【发布时间】:2023-03-10 02:22:01
【问题描述】:

我没有尝试读取设备或服务器上的 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 to base64 to byte[] to 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));

【问题讨论】:

标签: c# image windows-phone-8 exif


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 2011-10-26
    • 2016-11-05
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    相关资源
    最近更新 更多