【发布时间】: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)