PCL将图像文件保存到本地文件系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCL将图像文件保存到本地文件系统相关的知识,希望对你有一定的参考价值。

我正在寻找一种方法将图像文件存储在我的本地文件系统中,使用我的核心Project for Windows PhoneXamarin.androidXamarin.ios中的PCL Storage插件。但是,插件只提供了编写Text的方法。什么关于字节。有没有办法保存字节数组?

答案

这样的事情怎么样:

IFile file = await FileSystem.Current.GetFileFromPathAsync(fs.filepath);
byte[] buffer = new byte[100];
using (System.IO.Stream stream = await file.OpenAsync(FileAccess.ReadAndWrite))
{
    stream.Write(buffer, 0, 100);
}

编辑:一些代码来自http://pclstorage.codeplex.com/

IFile file = await folder.CreateFileAsync("myfile.abc", CreationCollisionOption.ReplaceExisting);

获得IFile对象后,您应该能够以相同的方式使用它:

IFile file = await folder.CreateFileAsync("myfile.abc", CreationCollisionOption.ReplaceExisting);
byte[] buffer = new byte[100];
using (System.IO.Stream stream = await file.OpenAsync(FileAccess.ReadAndWrite))
{
    stream.Write(buffer, 0, 100);
}
另一答案

您还可以查看Paul Betts的Splat库,以便进行跨平台图像加载/保存。

https://github.com/paulcbetts/splat

另一答案

为了拍照并将日期和时间存储在上面,我使用了以下组合:

  1. plugin.Media
  2. Plugin.Media.Abstractions
  3. PCLStorage
  4. SkiaSharp

我发现这个Using SkiaSharp, how to save a SKBitmap ?并用它作为基础:

// I get my bitmap from the camera (Plugin.Media allows to pick it from filesystem too)
var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions
{
    Directory = "MyFolder",
    Name = "MyPic001",
    PhotoSize = PhotoSize.Medium,
    CompressionQuality = 40,
    SaveToAlbum = true
});
// If succesfully taken...
if (file != null)
{
    // Start using SkiaSharp to write text on it
    var bitmap = SKBitmap.Decode(file.Path);
    var canvas = new SKCanvas(bitmap);
    var font = SKTypeface.FromFamilyName("Arial");
    var brush = new SKPaint
    {
        Typeface = font,
        TextSize = Convert.ToInt64(40),
        IsAntialias = true,
        Color = new SKColor(255, 255, 255, 255)
    };
    // Write on top of the image
    canvas.DrawText(DateTime.Now.ToString("dd/MM/yyyy HH:mm"), 10, 60, brush);
    var imageSK = SKImage.FromBitmap(bitmap);
    // Get rootFolder and FileName from Plugin.Media's file.Path
    string A = file.Path;
    string P = A.Substring(0, A.LastIndexOf("/"));
    string F = A.Substring(A.LastIndexOf("/") + 1, A.Length - (A.LastIndexOf("/") + 1));
    // Start using PCLStorage
    IFolder rootFolder = await FileSystem.Current.GetFolderFromPathAsync(P);
    IFile myFile = await rootFolder.GetFileAsync(F);
    // Use PCLStorage file opening to create an IO.Stream
    using (Stream s = await myFile.OpenAsync(FileAccess.ReadAndWrite))
    {
        // Use SkiaSharp SKImage and SKData to Save the image+text on file.Path
        SKData d = imageSK.Encode(SKEncodedImageFormat.Jpeg, 40);
        d.SaveTo(s);
    }
}

以上是关于PCL将图像文件保存到本地文件系统的主要内容,如果未能解决你的问题,请参考以下文章

将多个图像从asp.net中的文件夹保存到本地

将图像保存到文件系统

如何将互联网上的图像保存到 Python 中的本地文件

使用 mvc3 将图像保存到文件系统

React-native-android - 如何将图像保存到Android文件系统并在手机的“图库”中查看

如何在 React 的本地文件夹中保存图像并返回路径