The helper methods i use are....
private async Task<string> ToBase64(byte[] image, uint height, uint width, double dpiX = 96, double dpiY = 96)
{
var encoded = new InMemoryRandomAccessStream();
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, encoded);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, height, width, dpiX, dpiY, image);
await encoder.FlushAsync();
encoded.Seek(0);
var bytes = new byte[encoded.Size];
await encoded.AsStream().ReadAsync(bytes, 0, bytes.Length);
return Convert.ToBase64String(bytes);
}
private byte[] ImageToByteArray(WriteableBitmap wbm)
{
using (Stream stream = wbm.PixelBuffer.AsStream())
using (MemoryStream memoryStream = new MemoryStream())
{
stream.CopyTo(memoryStream);
return memoryStream.ToArray();
}
}
The code that picks an image and converts to writable bitmap is
WriteableBitmap image;
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".jpeg");
openPicker.FileTypeFilter.Add(".png");
StorageFile file = await openPicker.PickSingleFileAsync();
if (file != null)
{
var bitmp = new BitmapImage();
// Application now has read/write access to the picked file
var filePath = await file.OpenReadAsync();
bitmp.SetSource(filePath);
proPic.Source = bitmp;
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
image = new WriteableBitmap(1, 1);
image.SetSource(stream);
}
imageT = await ToBase64(ImageToByteArray(image), 100, 100, 96, 96);
pic = 1;
}
else
{
//OutputTextBlock.Text = "Operation cancelled.";
}
When i compare the base64string i get from the helper methods with http://www.dailycoding.com/utils/converter/imagetobase64.aspx The both are not the same.
changing the file into в base64
public async Task<string> GetBase64(string name)
{
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.GetFileAsync(name);
var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(file.Path));
byte[] fileBytes = null;
using (var stream = await file.OpenReadAsync())
{
fileBytes = new byte[stream.Size];
using (var reader = new DataReader(stream))
{
await reader.LoadAsync((uint)stream.Size);
reader.ReadBytes(fileBytes);
}
}
return Convert.ToBase64String(fileBytes);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.