【发布时间】:2018-04-25 15:18:33
【问题描述】:
如何使用 ImageSharp 库将图像转换为字节数组?
ImageSharp 库是否也可以根据 EXIF 方向建议/提供 RotateMode 和 FlipMode?p>
【问题讨论】:
-
关于第二个问题:有一个名为
AutoOrient()的转换API 函数。查一下;)
标签: imagesharp
如何使用 ImageSharp 库将图像转换为字节数组?
ImageSharp 库是否也可以根据 EXIF 方向建议/提供 RotateMode 和 FlipMode?p>
【问题讨论】:
AutoOrient() 的转换API 函数。查一下;)
标签: imagesharp
如果您希望将原始像素转换为 byte[],请执行以下操作。
var bytes = image.SavePixelData()
如果您希望将编码流转换为byte[](我怀疑这就是您要查找的内容)。你这样做。
using (var ms = new MemoryStream())
{
image.Save(ms, imageFormat);
return ms.ToArray();
}
【讨论】:
GetPixelSpan() 返回Span<Rgba32>,所以ToArray() 将返回Rgba32[]。要拥有byte[],可以使用MemoryMarshal.AsBytes(image.GetPixelSpan()).ToArray()
GetPixelSpan,应该添加using SixLabors.ImageSharp.Advanced;(我花了几分钟才弄清楚为什么VS找不到这个方法......)
对于那些关注 2020 年的人:
SixLabors 似乎喜欢更改命名和添加抽象层,所以... 现在要获取原始字节数据,请执行以下步骤。
GetPixelMemoryGroup()方法获取图片的MemoryGroup。GetPixelMemoryGroup() 返回一个接口)并获取第一个元素(如果有人告诉我他们为什么这样做,我将不胜感激。System.Memory<TPixel> 获得Span,然后以旧方式做事。
(我更喜欢@Majid 评论的解决方案)所以代码看起来像这样:
var _IMemoryGroup = image.GetPixelMemoryGroup();
var _MemoryGroup = _IMemoryGroup.ToArray()[0];
var PixelData = MemoryMarshal.AsBytes(_MemoryGroup.Span).ToArray();
您不必将其拆分为变量,您可以在一行代码中完成此操作。我这样做只是为了澄清目的。此解决方案仅适用于 2020 年 9 月 6 日
【讨论】:
IMemoryGroup<T> 表示大小一致的不连续内存的集合。第一个元素仅代表该集合中的第一项。
Spans 在那里不可用。