Need to install the package System.Drawing.Common in nuget
public static void CompressImg(int dWidth, int dHeight, string inFile, string dFile, int flag = 80)
{
System.Drawing.Image iSource = System.Drawing.Image.FromFile(inFile);
System.Drawing.Imaging.ImageFormat tFormat = iSource.RawFormat;
if (iSource.Width > dWidth)
{
dHeight = dWidth * iSource.Height / iSource.Width;
}
else
{
dWidth = iSource.Width;
dHeight = iSource.Height;
}
Bitmap ob = new Bitmap(dWidth, dHeight);
Graphics g = Graphics.FromImage(ob);
g.Clear(System.Drawing.Color.Transparent);
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(iSource, new Rectangle(0, 0, dWidth, dHeight), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);
g.Dispose();
System.Drawing.Imaging.EncoderParameters ep = new System.Drawing.Imaging.EncoderParameters();
long[] qy = new long[1];
qy[0] = flag;
System.Drawing.Imaging.EncoderParameter eParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
ep.Param[0] = eParam;
try
{
System.Drawing.Imaging.ImageCodecInfo[] arrayICI = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
System.Drawing.Imaging.ImageCodecInfo jpegICIinfo = null;
string imgExtend = tFormat.ToString().ToUpper();
for (int x = 0; x < arrayICI.Length; x++)
{
if (arrayICI[x].FormatDescription.Equals(imgExtend))
{
jpegICIinfo = arrayICI[x];
break;
}
}
if (jpegICIinfo != null)
{
ob.Save(dFile, jpegICIinfo, ep);
}
else
{
ob.Save(dFile, tFormat);
}
}
catch (Exception ex)
{
string msg = ex.Message;
Console.WriteLine(msg);
}
finally
{
iSource.Dispose();
ob.Dispose();
}
}
public static void CompressImgByte(int dWidth, int dHeight, Stream inputStream, Stream outStream, int flag = 80)
{
System.Drawing.Image iSource = System.Drawing.Image.FromStream(inputStream);
System.Drawing.Imaging.ImageFormat tFormat = iSource.RawFormat;
if (iSource.Width > dWidth)
{
dHeight = dWidth * iSource.Height / iSource.Width;
}
else
{
dWidth = iSource.Width;
dHeight = iSource.Height;
}
Bitmap ob = new Bitmap(dWidth, dHeight);
Graphics g = Graphics.FromImage(ob);
g.Clear(System.Drawing.Color.Transparent);
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(iSource, new Rectangle(0, 0, dWidth, dHeight), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);
g.Dispose();
System.Drawing.Imaging.EncoderParameters ep = new System.Drawing.Imaging.EncoderParameters();
long[] qy = new long[1];
qy[0] = flag;
System.Drawing.Imaging.EncoderParameter eParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
ep.Param[0] = eParam;
try
{
System.Drawing.Imaging.ImageCodecInfo[] arrayICI = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
System.Drawing.Imaging.ImageCodecInfo jpegICIinfo = null;
string imgExtend = tFormat.ToString().ToUpper();
for (int x = 0; x < arrayICI.Length; x++)
{
if (arrayICI[x].FormatDescription.Equals(imgExtend))
{
jpegICIinfo = arrayICI[x];
break;
}
}
if (jpegICIinfo != null)
{
ob.Save(outStream, jpegICIinfo, ep);
}
else
{
ob.Save(outStream, tFormat);
}
}
catch (Exception ex)
{
string msg = ex.Message;
Console.WriteLine(msg);
}
finally
{
iSource.Dispose();
ob.Dispose();
}
}