【问题标题】:ImageProcessor seems to rotate image 90 degrees after resizingImageProcessor 似乎在调整大小后将图像旋转 90 度
【发布时间】:2015-12-28 11:59:33
【问题描述】:

我使用 nuget for c# 下载了 ImageProcessor 库。我正在使用它为网站上传和调整图像大小。上传过程工作正常,但当我尝试查看上传的图像时,它会从原始图像向后旋转 90 度。这是我正在使用的代码:

        ISupportedImageFormat format = new JpegFormat { Quality = 70 };

        using (MemoryStream inStream = new MemoryStream(_img))
        {
            using (MemoryStream outStream = new MemoryStream())
            {
                // Initialize the ImageFactory using the overload to preserve EXIF metadata.
                using (ImageFactory imageFactory = new ImageFactory(preserveExifData: false))
                {
                    // Load, resize, set the format and quality and save an image.
                    imageFactory.Load(inStream)
                        .Resize(new ResizeLayer(new Size(width, height), resizeMode: resizeMode))
                                .Format(format)
                                .Save(outStream);
                }

                return outStream.ToArray();
            }
        }

【问题讨论】:

  • 根据您用于查看图像的软件,某些软件会使用图像的元数据来旋转图像 - ImageProcessor 可能不会。反之亦然。
  • 正在从浏览器中查看。我下载了调整大小的图像,它偏离了 90 度。
  • 尝试将preserveExifData 设置为true,看看是否有区别。除此之外,我没有建议。对不起。
  • 现在我注意到图片实际上是很长的路,不知道这是否有区别。我是用手机拍的。
  • 照片通常有 Exif 元数据。这些 Exif 属性之一是方向。这会影响图像的显示方式。试试我上面的建议,看看是否有帮助。

标签: c# asp.net-mvc-4 image-processing image-uploading imageprocessor


【解决方案1】:

如果您不保留 EXIF 元数据,ImageFactory 类有一个方法AutoRotate,它将改变图像以补偿原始方向。

http://imageprocessor.org/imageprocessor/imagefactory/autorotate/

您的新代码如下。

ISupportedImageFormat format = new JpegFormat { Quality = 70 };

using (MemoryStream inStream = new MemoryStream(_img))
{
    using (MemoryStream outStream = new MemoryStream())
    {
        // Initialize the ImageFactory using the overload to preserve EXIF metadata.
        using (ImageFactory imageFactory = new ImageFactory(preserveExifData: false))
        {
            // Load, resize, set the format and quality and save an image.
            imageFactory.Load(inStream)
                        .AutoRotate()
                        .Resize(new ResizeLayer(new Size(width, height), resizeMode: resizeMode))
                        .Format(format)
                        .Save(outStream);
        }

        return outStream.ToArray();
    }
}

【讨论】:

    猜你喜欢
    • 2017-10-19
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2020-07-06
    • 1970-01-01
    相关资源
    最近更新 更多