【问题标题】:C# Downscale image to a certain number of pixelsC# 将图像缩小到一定数量的像素
【发布时间】:2018-04-19 00:34:33
【问题描述】:

我有一些图像超过 6.000.000 像素,我想将它们缩放到该值附近。

public void downscaleByCalculateInSampleSize(string filePath, string newPath)
    {
        int reqNumberOfPixels = 6000000;

        double inSampleSize = 1;

        using (System.Drawing.Image oImage = System.Drawing.Image.FromFile(filePath))
        {
            int newWidth = oImage.Width;
            int newHeight = oImage.Height;

            int actualNumberofPixels = oImage.Width * oImage.Height;

            if (actualNumberofPixels > reqNumberOfPixels)
            {
                inSampleSize = Math.Sqrt(actualNumberofPixels / reqNumberOfPixels);

                newWidth = Convert.ToInt32(Math.Round((float)oImage.Width / inSampleSize));
                newHeight = Convert.ToInt32(Math.Round((float)oImage.Height / inSampleSize));
            }

            var newImage = new Bitmap(newWidth, newHeight);

            Graphics graphics = Graphics.FromImage(newImage);

            graphics.DrawImage(oImage, 0, 0, newWidth, newHeight);

            newImage.Save(newPath);
        }
    }

我尝试缩小具有 6367 x 4751 像素和 72 dpi 分辨率(24 位深度)且大小为 8.03 MB 的图像。我已经调整了这张图片的大小,我希望它的尺寸​​会小得多(低于 8 MB),但我的有 17 个。缩放后的图像为 2847 x 2125(96 dpi,32 位深度)。为什么会这样? 有没有办法将图像缩小到请求的像素数,结果尺寸要小得多?我不在乎分辨率...

【问题讨论】:

  • 问题:你的输入是jpeg,你的输出是bmp吗?
  • 都是JPG文件
  • 这很奇怪,因为当我做一些数学运算时:2847 x 2125 x 24bpp 我得到了大约。 17 MB。因此,您可能正在保存为 jpeg 文件,文件大小表明它是 bmp。
  • 也许这会提供更多信息:stackoverflow.com/questions/21218017/…
  • 看到“.jpg”扩展名并不意味着该文件是 jpeg 格式。使用newImage.Save(newPath, ImageFormat.Jpeg)

标签: c# image rescale


【解决方案1】:

您正在使用整数除法和截断结果:

inSampleSize = Math.Sqrt(actualNumberofPixels / reqNumberOfPixels);

试试吧:

inSampleSize = Math.Sqrt((double)actualNumberofPixels / (double)reqNumberOfPixels);

另外,保存为:

newImage.Save(newPath, ImageFormat.Jpeg);

如果您使用具有这么多像素的有损格式进行保存,您得到的尺寸似乎太大了

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2014-03-05
    • 2015-04-29
    • 1970-01-01
    相关资源
    最近更新 更多