【问题标题】:ImageProcessor - Resize to a specified width (automatic height)ImageProcessor - 调整到指定宽度(自动高度)
【发布时间】:2017-02-28 00:59:41
【问题描述】:

我在我的应用程序中使用ImageProcessor 库。

我正在使用此代码来调整给定的特定尺寸(宽度+高度):

 public static byte[] ResizeImage(byte[] inputFileBytes, int w, int h, ResizeMode resizeMode)
        {
            byte[] photoBytes = inputFileBytes; 

            ISupportedImageFormat format = new JpegFormat { Quality = 70, IsIndexed = false };
            Size size = new Size(w, h);
            using (MemoryStream inStream = new MemoryStream(photoBytes))
            using (MemoryStream outStream = new MemoryStream())
            {

                using (ImageFactory imageFactory = new ImageFactory(preserveExifData: false))
                {
                    var r = new ResizeLayer(size, resizeMode);

                    imageFactory.Load(inStream)
                        .Resize(r)
                        .Format(format)
                        .Save(outStream);
                }


                return outStream.ToArray();
            }
        }

我通过(这是一个作物示例)调用它:

   byte[] servedImage =  ResizeImage(byteArray,[...imgWidth...],
                       [...imgHeight...],ResizeMode.Crop);

这一切都很好。

但现在我需要将图像调整为 特定 width — 而且我希望高度成比例。

我已经知道Resize method 有过载:

public ImageFactory Resize(Size size)

但我在size 参数中只有Width(我希望自动计算高度)

问题

如何将图像 (byte[]) 调整为特定的 Width,同时使用 ImageProcessor 保持纵横比?

【问题讨论】:

  • 最简单的选择是计算高度。如果您有原始宽度和所需宽度,只需将它们除以得到乘数,并将其应用于高度 - 工作完成
  • 你不能计算出新的高度吗? ratio = old_height / old_width,然后是new_height = old_width * ratio
  • @CallumBradbury 我没有。我从用户那里得到一个字节数组,我不会自己制作图像,以便提取比率,然后再次告诉库以便它可以创建图像....看起来很腰。
  • 啊,是的,这确实使事情复杂化了
  • 看来 Constrain() 函数比 Resize() 更合适

标签: c# imageprocessor


【解决方案1】:

根据您尝试实现的裁剪/拉伸行为设置 ResizeMode。该库旨在根据为 ResizeMode 选择的值自动适应纵横比的差异。

如果您想自动计算高度,请为 Size 中的 Height 传递一个 0。

【讨论】:

  • 我指定的代码用于裁剪 - 是的。我只是展示了我如何调用该方法。如果我删除裁剪(实际上我现在不需要它) - 如何将图像重新调整为特定宽度?
  • 哦,请让我检查一下 :-)
  • 我不认为原始图像以 quality = 100 保存,这是某种有损解压缩的结果。在没有看到原始图像是如何创建的情况下,我能做出的最佳猜测。
  • 这只是来自网络的给定图像,给定图像不是已经100质量了吗?
猜你喜欢
  • 2017-08-25
  • 2015-03-27
  • 2013-02-07
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
相关资源
最近更新 更多