【问题标题】:Image after resize has a discolored line on the left side调整大小后的图像左侧有一条变色线
【发布时间】:2020-08-08 23:36:47
【问题描述】:

我正在尝试使用 SixLabors.ImageSharp(版本 1.0.0-beta0007)在 .NET Core C# 应用程序中将图像大小调整为缩略图。我注意到只有某些图像,调整大小的图像具有白色、红色或蓝色扭曲边框,如下所示:

我生成缩略图的代码如下:

        using (var imageToResize = Image.Load(inStream, out IImageFormat imageFormat))
        {
            var size = GetThumbnailSize(imageToResize.Size()); //max size 150,preserves aspect-ratio 
            imageToResize.Mutate(x => x.Resize(new ResizeOptions()
            {
                Size = size,
                Mode = ResizeMode.Crop
            }));

            using (var memorystream = new MemoryStream())
            {
                imageToResize.Save(memorystream , imageFormat);
                ms.Position = 0;
                outputStream.UploadFromStreamAsync(memorystream);
            }
        }

这两张图片是从同一设备捕获的,并且都具有相同的尺寸 (3024x4032),这是我能注意到的唯一相似之处,因为我是图像处理的新手。我也玩过调整大小模式和不同的重采样器,但无法解决这个问题。

是什么导致了这个问题?有没有办法通过使用 SixLabors.ImageSharp 库来解决这个问题?

【问题讨论】:

  • 您的输入流可能存在问题,未提供所有字节。我猜您正在通过UploadFromStreamAsyncmethod 调用使​​用Azure。将您的输入流复制到 MemoryStream 并尝试从那里加载。
  • 谢谢@JamesSouth!我通过将输入流映射到一个字节数组并从中加载图像来完成它。

标签: c# image-processing .net-core image-resizing imagesharp


【解决方案1】:

在我修改代码以从字节数组而不是流加载 ImageSharp 图像后,该问题得到解决。根据@JamesSouth 对上述问题的评论,可能是我的输入流没有提供所有字节。

以下是更新后的代码:

   // convert inStream to a byte array "bytes"

    using (var imageToResize = Image.Load(bytes, out IImageFormat imageFormat))
    {
        Size newSize = GetThumbnailSize(imageToResize.Size()); //max size 150, preserves aspect-ratio 
        imageToResize.Mutate(x => x.Resize(newSize));

        ...
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2023-03-22
    • 1970-01-01
    • 2014-06-03
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多