C# 将图像缩小到一定数量的像素
C# Downscale image to a certain number of pixels
我有一些图像,比方说 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 位深度)。为什么会这样?
有没有办法将图像缩小到请求的像素数量,结果尺寸更小?我不关心分辨率...
您在以下位置使用整数除法和截断结果:
inSampleSize = Math.Sqrt(actualNumberofPixels / reqNumberOfPixels);
试试看:
inSampleSize = Math.Sqrt((double)actualNumberofPixels / (double)reqNumberOfPixels);
此外,保存方式:
newImage.Save(newPath, ImageFormat.Jpeg);
如果您使用具有那么多像素的有损格式保存,您得到的尺寸似乎太大了
我有一些图像,比方说 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 位深度)。为什么会这样? 有没有办法将图像缩小到请求的像素数量,结果尺寸更小?我不关心分辨率...
您在以下位置使用整数除法和截断结果:
inSampleSize = Math.Sqrt(actualNumberofPixels / reqNumberOfPixels);
试试看:
inSampleSize = Math.Sqrt((double)actualNumberofPixels / (double)reqNumberOfPixels);
此外,保存方式:
newImage.Save(newPath, ImageFormat.Jpeg);
如果您使用具有那么多像素的有损格式保存,您得到的尺寸似乎太大了