gpt4 book ai didi

c# - 使用特定大小和尺寸在 C# 中调整图像大小

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:55 25 4
gpt4 key购买 nike

我想将图像调整为 150*150 尺寸,图像大小应小于或等于 10kb。我已经完成了 Bitmap,代码片段如下:

System.Drawing.Image old_Image=System.Drawing.Image.FromFile(//ImagePath);
Bitmap new_Image= new Bitmap(150, 150, PixelFormat.Format24bppRgb);
Graphics g=new Graphics();
g= Graphics.FromImage(new_Image);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.DrawImage(old_Image, new Rectangle(new Point(0, 0), new_Image));

当我这样做时,我得到了所有尺寸为 150*150 且大小小于 10kb 的图像。但是对于每个更大的原始尺寸的图像,我如何确保每次图像尺寸都小于 10kb。我可以通过在代码端检查它来确定吗?还是有其他替代方法?

更新:我已经压缩了图像并且只要图像大小小于 10kb 就需要做同样的事情。循环在第一次迭代和第二次迭代中工作正常,调用 b.Save(ms, ici, ep) 时出现错误“参数无效”。在第一次迭代后,我已经为 Bitmap 和 MemoryStream 调用了 dispose。那么这个错误的原因可能是什么。下面给出了我用于迭代的代码片段:

while (length > 10240)
{

long quality = 50;

ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo ici = null;

foreach (ImageCodecInfo codec in codecs)
{
if (codec.MimeType == "image/jpeg")
ici = codec;
}

EncoderParameters ep = new EncoderParameters();
ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
ms = new MemoryStream();
b.Save(ms, ici, ep);
using (Bitmap bp = new Bitmap(ms))
{
b = bp;

}
length = Convert.ToInt32(ms.Length);
ms.Dispose();

}

最佳答案

您可以像这样获得图像的输出尺寸:

using (var testStream = new MemoryStream())
{
b.Save(testStream, ImageFormat.Jpeg);
long streamSize = testStream.Length;
}

b 是您的图片。

如果你想进一步压缩它以减小图像的大小,试试这个:

//quality of the compressed image
long quality = 50;

ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo ici = null;

foreach (ImageCodecInfo codec in codecs)
{
if (codec.MimeType == "image/jpeg")
ici = codec;
}

EncoderParameters ep = new EncoderParameters();
ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);

using (var testStream = new MemoryStream())
{
b.Save(testStream, ici, ep);
long streamSize = testStream.Length;
}

我们正在做与上面相同的事情,但我们现在有可能降低 jpeg 压缩的质量。

关于c# - 使用特定大小和尺寸在 C# 中调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22318625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com