我想寫一個方法,以base64字符串中的圖像數據,並將其保存到二進制文件,同時保留透明度(例如在PNG的情況下)。C# - 保存base64字符串圖像文件,而不會失去透明度
我的其他要求是,這需要在PCL(可移植類庫)的C#中完成。
我知道您可以使用Image或WriteableBitmap來解決此問題,但這些類在PCL中不可用。
我有一個不服用的base64數據,並將其保存到文件的作業以下方法:
public static async Task Base64ToBinaryImageFile(IFile file, string base64Content)
{
var bytes = Convert.FromBase64String(base64Content);
using (var stream = await file.OpenAsync(FileAccess.ReadAndWrite))
{
stream.Seek(0, SeekOrigin.Begin);
using (var writer = new BinaryWriter(stream))
{
writer.Write(content);
writer.Flush();
}
}
}
它正常工作,不同之處在於:
我失去了透明度數據(所以透明像素顯示爲黑色)。
使用此方法創建的文件比原始文件具有更大的大小(以字節爲單位)。
有什麼想法是什麼原因以及如何解決這些問題?
更新:這裏是一個以base64數據發送到C#的JavaScript代碼:
function onPaste(event) {
var $event = event.data.$;
var clipboardData = $event.clipboardData;
var found = false;
var imageType = /^image/;
if (!clipboardData) {
return false;
}
return Array.prototype.forEach.call(clipboardData.types, function (type, i) {
if (found) {
return false;
}
if (type.match(imageType) || clipboardData.items[i].type.match(imageType)) {
readImageAsBase64(clipboardData.items[i]);
return found = true;
}
return false;
});
}
function readImageAsBase64(item) {
if (!item || typeof item.getAsFile !== "function") {
return;
}
var file = item.getAsFile();
var reader = new FileReader();
reader.onload = function (evt) {
window.external.notify("pasteImageBase64/" + evt.target.result);
};
reader.readAsDataURL(file);
}
此代碼無關的圖像數據被打開的PNG圖片除非將其保存到文件中。如果圖像數據不是你想要的,'base64Content'中的東西已經是錯誤的了。 base64編碼數據來自哪裏?也許是從瀏覽器複製粘貼的圖像..? –
你可以發佈使base64字符串的代碼? –
我懷疑當創建base64Content字符串時發生的損失 –