【发布时间】:2016-05-17 13:13:56
【问题描述】:
首先,我很抱歉我的英语不好。
我在这个项目上工作了几天,但我的问题没有任何解决方案。我尝试将图片从我的 UWP 应用程序发送到 c# 中的 Web 服务。我在一个安卓应用程序中做了这件事没有任何问题。
我应该将图像编码为 web 服务可以解码的 base64 字符串。
我有两个问题,第一个是如果我尝试(使用在线解码器)解码我的 base64 字符串,这给了我这样的代码。
在图片中,我们可以看到它没有显示完整的图片。:
我用这段代码把它写成base64:
private async void ToBase64(WriteableBitmap img)
{
var encoded = new InMemoryRandomAccessStream();
// Copy buffer to pixels
byte[] pixels;
using (var stream = img.PixelBuffer.AsStream())
{
pixels = new byte[(uint)stream.Length];
await stream.ReadAsync(pixels, 0, pixels.Length);
}
var encoder = await BitmapEncoder
.CreateAsync(BitmapEncoder.PngEncoderId, encoded);
encoder.SetPixelData(BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Premultiplied, (uint)img.PixelWidth, (uint)img.PixelHeight
, 96, 96, pixels);
await encoder.FlushAsync();
encoded.Seek(0);
var array = new byte[encoded.Size];
await encoded.AsStream().ReadAsync(array, 0, array.Length);
Base64String = Convert.ToBase64String(array);
}
我的第二个问题是,如果我尝试将此 Base64 发送到我的 Web 服务并使用 FromBase64String 对其进行解码,则 Web 服务会返回错误“base64 字符串格式不正确”。我不明白,因为我们可以看到,在线解码器可以对其进行解码,而我的 android 应用程序没有这个问题。
如果您对此问题有任何想法。 我尝试了很多我在互联网上看到的东西
感谢您的提前。
编辑 1
这是我的解码方法。此方法适用于通过 Android 应用发送的 Bitmap base64。
[WebMethod]
public string uploadPhoto(string image)
{
byte[] bytes = Convert.FromBase64String(image);
using (var imageFile = new FileStream("directory+filename", FileMode.Create))
{
imageFile.Write(bytes, 0, bytes.Length);
imageFile.Flush();
}
return number;
}
编辑 2
它适用于此代码:
public async Task<String> SaveToBytesAsync(ImageSource imageSource)
{
byte[] imageBuffer;
var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
var file = await localFolder.CreateFileAsync("temp.jpg", CreationCollisionOption.ReplaceExisting);
using (var ras = await file.OpenAsync(FileAccessMode.ReadWrite, StorageOpenOptions.None))
{
WriteableBitmap bitmap = imageSource as WriteableBitmap;
var stream = bitmap.PixelBuffer.AsStream();
byte[] buffer = new byte[stream.Length];
await stream.ReadAsync(buffer, 0, buffer.Length);
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, ras);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96.0, 96.0, buffer);
await encoder.FlushAsync();
var imageStream = ras.AsStream();
imageStream.Seek(0, SeekOrigin.Begin);
imageBuffer = new byte[imageStream.Length];
var re = await imageStream.ReadAsync(imageBuffer, 0, imageBuffer.Length);
}
await file.DeleteAsync(StorageDeleteOption.Default);
return Convert.ToBase64String(imageBuffer);
}
服务器上的解码给出完整的图像。 谢谢。
【问题讨论】:
-
试试这里显示的编码方法:stackoverflow.com/a/37059782/1136211
标签: c# web-services base64 win-universal-app