【问题标题】:Convert Image<Rgba32> to Byte[] using ImageSharp使用 ImageSharp 将 Image<Rgba32> 转换为 Byte[]
【发布时间】:2018-04-25 15:18:33
【问题描述】:

如何使用 ImageSharp 库将图像转换为字节数组?

ImageSharp 库是否也可以根据 EXIF 方向建议/提供 RotateMode 和 FlipMode?​​p>

【问题讨论】:

  • 关于第二个问题:有一个名为AutoOrient() 的转换API 函数。查一下;)

标签: imagesharp


【解决方案1】:

如果您希望将原始像素转换为 byte[],请执行以下操作。

var bytes = image.SavePixelData()

如果您希望将编码流转换为byte[](我怀疑这就是您要查找的内容)。你这样做。

using (var ms = new MemoryStream())
{
    image.Save(ms, imageFormat);
    return ms.ToArray();
}

【讨论】:

  • 是的,我用的是后一种方式。谢谢。
  • 太棒了。你能标记答案然后请满足我的强迫症。
  • 对于稍后出现的任何人:请注意,image.SavePixelData() 函数已替换为 image.GetPixelSpan(),它返回像素类型的 Span(然后可以转如果需要,使用 .ToArray() 放入数组中)。
  • GetPixelSpan() 返回Span&lt;Rgba32&gt;,所以ToArray() 将返回Rgba32[]。要拥有byte[],可以使用MemoryMarshal.AsBytes(image.GetPixelSpan()).ToArray()
  • @Majid;为了访问GetPixelSpan,应该添加using SixLabors.ImageSharp.Advanced;(我花了几分钟才弄清楚为什么VS找不到这个方法......)
【解决方案2】:

对于那些关注 2020 年的人:

SixLabors 似乎喜欢更改命名和添加抽象层,所以... 现在要获取原始字节数据,请执行以下步骤。

  1. 使用GetPixelMemoryGroup()方法获取图片的MemoryGroup
  2. 将其转换为数组(因为 GetPixelMemoryGroup() 返回一个接口)并获取第一个元素(如果有人告诉我他们为什么这样做,我将不胜感激。
  3. System.Memory&lt;TPixel&gt; 获得Span,然后以旧方式做事。 (我更喜欢@Majid 评论的解决方案)

所以代码看起来像这样:

var _IMemoryGroup = image.GetPixelMemoryGroup();
var _MemoryGroup = _IMemoryGroup.ToArray()[0];
var PixelData = MemoryMarshal.AsBytes(_MemoryGroup.Span).ToArray();

您不必将其拆分为变量,您可以在一行代码中完成此操作。我这样做只是为了澄清目的。此解决方案仅适用于 2020 年 9 月 6 日

【讨论】:

  • 这不是一个好的答案,应该避免。 IMemoryGroup&lt;T&gt; 表示大小一致的不连续内存的集合。第一个元素仅代表该集合中的第一项。
  • @JamesSouth 以及尝试在异步函数中获取像素数据怎么样? Spans 在那里不可用。
  • @JamesSouth 提供至少可行的解决方案
  • @Panagiotis Kanavos,不是真的,你没有考虑时间段。如果您检查上面 cmets 的答案,您会发现以下文本:“请注意,SavePixelData() 函数已替换为 GetPixelSpan()”我使用的是库的发布版本,而不是 James 认为的 beta 版,我已经检查了他的答案,方法不存在,我检查了 Jarak 和 Majid 的解决方案。方法不存在。所以我想出了我的解决方案。这意味着库的作者真的非常喜欢交换函数,如果到今天他返回 ~handy one-liner~ 我会感到内疚吗?
  • @Panagiotis Kanavos,而且,是的......他的回答不被接受:)
猜你喜欢
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
相关资源
最近更新 更多