标签: imagesharp

如何使用 ImageSharp 调整中心大小和裁剪图像

我需要转换一些基于 System.Drawing 的代码以使用这个 .NET Core 兼容库:

https://github.com/SixLabors/ImageSharp

下面基于 System.Drawing 的代码调整图像大小并裁剪边缘,返回内存流然后保存。ImageSharp库可以做到这一点吗?

private static Stream Resize(Stream inStream, int newWidth, int newHeight)
{
    var img = Image.Load(inStream);
    if (newWidth != img.Width || newHeight != img.Height)
    {
        var ratioX = (double)newWidth / img.Width;
        var ratioY = (double)newHeight / img.Height;
        var ratio = Math.Max(ratioX, ratioY);
        var width = (int)(img.Width * ratio);
        var height = (int)(img.Height * ratio);

        var newImage = new Bitmap(width, height);
        Graphics.FromImage(newImage).DrawImage(img, 0, 0, width, height);
        img = newImage;

        if (img.Width != newWidth …
Run Code Online (Sandbox Code Playgroud)

c# imagesharp

20
推荐指数
2
解决办法
1万
查看次数

使用 ImageSharp 将包含 Bgra32 的传入缓冲区转换为 ImageSharp Image<Rgba24> 图像的最佳方法是什么?

PixelFormats.Bgra32从 UAP 和 WPF获取图像,我想知道将它们转换为 SixLabors.ImageSharpImage<Rgba32>图像的最快方法。在我使用 复制缓冲区后,是否有一些神奇的“变异”可以翻转像素字节TryGetSinglePixelSpan

c# imagesharp

9
推荐指数
1
解决办法
338
查看次数

无法在 C# 中使用 SixLabors.ImageSharp 处理 .jpg 图像 - 版本 1.0.0-beta0007

我无法在 c# 中使用 SixLabors.ImageSharp 版本 - 1.0.0-beta0007 保存 jpg 图像,它会引发错误。除了 GIF、PNG、JPEG、BMP 格式图像之外,还有其他解决方案可以解决此问题吗?

抛出异常:

无法加载图像。可用的解码器:

  • GIF:Gif解码器
  • PNG:Png解码器
  • JPEG:Jpeg解码器
  • BMP:Bmp解码器

代码:

    public string ResizeImage(byte[] imageBytes, int height, int width)
    {
        byte[] image = new byte[] { };

        using (MemoryStream inStream = new MemoryStream(imageBytes))
        {
            using (MemoryStream outStream = new MemoryStream())
            {
                using (Image imageSharp = Image.Load(inStream))
                {
                    imageSharp.Mutate(x => x.Resize(width, height));
                    imageSharp.SaveAsJpeg(outStream);
                    imageSharp.Dispose();
                }

                image = outStream.ToArray();
                outStream.Flush();
                inStream.Flush();
            }
        }
        return Convert.ToBase64String(image);
    }
Run Code Online (Sandbox Code Playgroud)

c# image aws-lambda asp.net-core imagesharp

8
推荐指数
2
解决办法
9993
查看次数

如何使用 ImageSharp(Web) 用图像压缩/变异流(IFormFile)

我正在尝试使用ImageSharp.Web()库压缩图像(通常约为 5-30)质量/大小,但我真的不明白我该怎么做或我在这里缺少什么。

  • 我可以重用相同的内存流 / IFormFile 对象来保存变异的图像吗?还是我需要从当前图像对象创建一个新图像?
  • 要使用内存流,我还需要使用特定的 JpegDecoder() 吗?
  • 不确定这一行是否正确item.SaveAsJpeg(memoryStream); .
  • 也许有人可以帮助我解决逻辑问题,或者任何提示或技巧都会非常有帮助。谢谢!

简单的代码示例:

private byte[] ConvertImageToByteArray(IFormFile inputImage)
{
    byte[] result = null;

    // filestream
    using (var fileStream = inputImage.OpenReadStream()) // IFormFile inputImage

    // memory stream
    using (var memoryStream = new MemoryStream())
    {
        fileStream.CopyTo(memoryStream);
        memoryStream.Position = 0; // The position needs to be reset.

        var before = memoryStream.Length;

        using (var item = Image.Load(memoryStream)) // do I need to use here JpegDecoder?
        {
            var beforeMutations = item.Size();

            // dummy …
Run Code Online (Sandbox Code Playgroud)

c# .net-core asp.net-core imagesharp

7
推荐指数
1
解决办法
3549
查看次数

使用 C# 以跨平台方式测量字符串的宽度(以像素为单位)

我有一些现有的 C# 代码,用于System.Drawing.Common测量字符串的近似宽度(以像素为单位):

var text = "abc123 this is some long text my dog's name is fido.";

using (var bitmap = new Bitmap(500, 50))
using (var graphics = Graphics.FromImage(bitmap))
{
    // Size: 9 Points
    using var font = new System.Drawing.Font(familyName: "Times New Roman", emSize: 9f);
    
    var ms = graphics.MeasureString(text, font);
    
    // Output: 'abc123 this is some long text my dog's name is fido.' via System.Drawing: 394.00195 x 22.183594
    Console.WriteLine($"'{text}' via System.Drawing: {ms.Width} x {ms.Height}");
}
Run Code Online (Sandbox Code Playgroud)

升级到 后.NET …

skiasharp imagesharp system.drawing.common .net-6.0

7
推荐指数
1
解决办法
2058
查看次数

ImageSharp 在 Core 2.2 中在图像上绘制形状

ImageSharp我正在我的 .Net Core 2.2 项目中使用(ver 1.0.0-beta0006)。我主要用它来调整图像大小(以生成缩略图)并且它工作正常。

最近,我需要在图像上绘制矩形。根据文档,这就是我必须做的:

using (var image = new Image<Rgba32>(800, 800))
        {
            image.Mutate(x => x.DrawLines(
                Rgba32.HotPink,
                10,
                new SixLabors.Primitives.PointF[] {
                    new Vector2(10, 10),
                    new Vector2(550, 50),
                    new Vector2(200, 400)
                }));

            using (var stream = new MemoryStream())
            {
                image.SaveAsBmp(stream);
            }
        }
Run Code Online (Sandbox Code Playgroud)

但是,我意识到在我的Mutatelambda 方法中没有名为 的方法DrawLines。我可以知道我是否错过了集会吗?根据文档,它是using

using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.PixelFormats;
Run Code Online (Sandbox Code Playgroud)

两者都可以在SixLabors.ImageSharp包装中找到。

c# asp.net-core imagesharp

6
推荐指数
1
解决办法
4892
查看次数

使用SixLabors ImageSharp检测图像格式

如何使用SixLabors.ImageSharp获取图像格式?

在版本1.0.0-alpha9-00152中,我可以使用:

Image<Rgba32> image = Image.Load(GetBytesFromBlobStorage());
IImageFormat format = image.CurrentImageFormat;
Run Code Online (Sandbox Code Playgroud)

但是.CurrentImageFormat()没有看到能够在测试版1.0.0-beta0001.

我想知道图像是.png,.bmp还是.jpeg.

c# imagesharp

5
推荐指数
2
解决办法
1800
查看次数

PdfSharpCore图像渲染问题

完全无法使用PdfSharpCore将JPEG图像渲染为PDF。

代码很简单

public byte[] GetPdfContent()
{
    ImageSource.ImageSourceImpl = new ImageSharpImageSource();

    var document = new PdfDocument();
    var logo = XImage.FromFile("logo.jpg");

    // this is test line, I'm saving XImage result and it is identical to the source file!
    File.WriteAllBytes("logo1.jpg", logo.AsJpeg().ToArray());

    var page = document.AddPage();
    var gfx = XGraphics.FromPdfPage(page);
    gfx.DrawImage(logo, 0, 0);

    using (var stream = new MemoryStream())
    {
         document.Save(stream, false);
         return stream.ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道ImageSource.ImageSourceImpl必须进行设置,并且已经将其设置为ImageSharp基于最简单的实现:ImageSource.ImageSourceImpl = new ImageSharpImageSource()这确实有效,因为XImage被logo1.jpg正确保存。

但是我的PDF在视觉上是空白的。二进制内容在那里,似乎所有格式属性都可以,但是二进制数据与源有些不同。

这是我的ImageSharp实现保存/加载图像的方式:

public class ImageSharpImageSource : …
Run Code Online (Sandbox Code Playgroud)

c# pdfsharp imagesharp

5
推荐指数
1
解决办法
864
查看次数

如何在 .NET core 中裁剪图像?

我需要在 .NET Core 中裁剪图像。我使用了 ImageSharp、CoreCompat 和 Microsoft.Windows.Compatibility,并扫描了我能找到的所有方法。但是,我仍然找不到裁剪图像的方法。可以调整大小,但不能裁剪。

如何根据左上角的像素位置、宽度和高度在 .NET Core 中裁剪图像?

c# image .net-core imagesharp

5
推荐指数
1
解决办法
9646
查看次数

将 ImageSharp.Image 转换为 ImageSharp.PixelFormats.Rgba32?

我正在使用 ImageSharp 学习教程(https://opentk.net/learn/chapter1/4-textures.html)。如何将“ImageSharp.Image”类型转换为“ImageSharp.PixelFormats.Rgba32”?

要加载图像,我正在使用

Image<Rgba32> image = Image.Load(path);

但我不断收到错误消息: Cannot implicitly convert type 'SixLabors.ImageSharp.Image' to 'SixLabors.ImageSharp.Image<SixLabors.ImageSharp.PixelFormats.Rgba32>'. An explicit conversion exists (are you missing a cast?).

c# rgba opentk imagesharp

5
推荐指数
1
解决办法
1552
查看次数