/// <summary>
/// 根据指定最长边大小,对指定图片进行缩放并返回转换后文件的路径
/// </summary>
/// <param name="filename">待处理图像文件路径</param>
/// <param name="newS">转换后图像的长边像素大小</param>
/// <param name="newPX">转换后图像的分辨率,默认为原图分辨率</param>
/// <returns>转换后文件路径</returns>
public string ImageScale(string filename, decimal newS,float newPX=0)
{
using (Image oldimg = Image.FromFile(filename))
{
decimal newW = oldimg.Width;
decimal newH = oldimg.Height;
if (newPX <= 0) newPX = oldimg.HorizontalResolution;
if (newW > newH)
{
newH = newH * newS / newW;
newW = newS;
}
else
{
newW = newW * newS / newH;
newH = newS;
}
Bitmap image = new Bitmap((int)newW, (int)newH, PixelFormat.Format24bppRgb);
try
{
image.SetResolution(newPX, newPX);
Graphics g = Graphics.FromImage(image);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(oldimg, new Rectangle(0, 0, image.Width, image.Height), new Rectangle(0, 0, oldimg.Width, oldimg.Height), GraphicsUnit.Pixel);
g.Dispose();
oldimg.Dispose();
return SaveToJpg(image);
}
catch (Exception ex) { }
finally
{
try
{
image.Dispose();
}
catch { }
}
}
return "";
}
/// <summary>
/// 保存图片
/// </summary>
/// <param name="image"></param>
/// <returns></returns>
public string SaveToJpg(Bitmap image)
{
string fpath = Path.GetTempFileName();//创建一个临时文件保存转换后文件
ImageCodecInfo[] imageCodecInfos = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo imageCodecInfo = null;
foreach (ImageCodecInfo info in imageCodecInfos)
{
if (info.MimeType == "image/jpeg")
{
imageCodecInfo = info;
break;
}
}
EncoderParameters encoderParams = new EncoderParameters(2);
encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
encoderParams.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 0x20L);
image.Save(fpath, imageCodecInfo, encoderParams);
return fpath;
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
请登录后查看评论内容