/// <summary>
/// 图片转换
/// </summary>
/// <param name="image"></param>
/// <param name="directoryPath">目录路径</param>
/// <param name="imageenum"></param>
/// <param name="qualityNum">图片质量</param>
public void ImageTransformation(Image image, string directoryPath, ImageFormatEnum imageenum = ImageFormatEnum._1080, long qualityNum = 100)
{
var ext = Path.GetExtension(directoryPath);
ext = ext.Substring(ext.LastIndexOf('.') + 1); //去除点 .jpeg => jpeg
int oldWidth = image.Width;
int oldHeight = image.Height;
int newWidth = 0;
int newHeight = 0;
if (oldWidth > oldHeight && oldWidth > (int)imageenum)
{
newWidth = (int)imageenum;
newHeight = Convert.ToInt32(oldHeight * newWidth / oldWidth);
}
else if (oldHeight > oldWidth && oldHeight > (int)imageenum)
{
newHeight = (int)imageenum;
newWidth = Convert.ToInt32(oldWidth * newHeight / oldHeight);
}
else if (oldWidth == oldHeight && oldWidth > (int)imageenum)
{
newHeight = (int)imageenum;
newWidth = Convert.ToInt32(oldWidth * newHeight / oldHeight);
}
else
{
newWidth = Convert.ToInt32(oldWidth);
newHeight = Convert.ToInt32(oldHeight);
}
//新建图片
Image newimage = new Bitmap(newWidth, newHeight);
//新建画板
Graphics g = Graphics.FromImage(newimage);
//清空画布并设置背景色
g.Clear(Color.Transparent);
//设置画布的绘画质量
g.CompositingQuality = CompositingQuality.HighQuality;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = SmoothingMode.HighQuality;
//设置高质量插值法
g.InterpolationMode = InterpolationMode.HighQualityBilinear;
//显示图像的位置
Rectangle destRect = new Rectangle(0, 0, newWidth, newHeight);
//显示图像那一部分
Rectangle srcRect = new Rectangle(0, 0, image.Width, image.Height);
g.DrawImage(image, destRect, srcRect, GraphicsUnit.Pixel);
g.Dispose();
//以下代码为保存图片时,设置压缩质量
EncoderParameters encoderParams = new EncoderParameters();
EncoderParameter encoderParam = new EncoderParameter(Encoder.Quality, qualityNum);
encoderParams.Param[0] = encoderParam;
//var format = GetImageFormat(image).ToString().ToLower();
//var encoder = GetEncoderInfo("image/" + format);
var encoder = GetEncoderInfo("image/" + ext);
newimage.Save(directoryPath, encoder, encoderParams);
newimage.Dispose();
newimage = null;
}
private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
/// <summary>
/// 图片格式
/// </summary>
public enum ImageFormatEnum
{
_640 = 640,
_800 = 800,
_1024 = 1024,
_1080 = 1080,
_1920 = 1920,
_2560 = 2560,
_b = 0 //原图
}
/// <summary>
///获取图片格式
/// </summary>
/// <param name="img">图片</param>
/// <returns>默认返回JPEG</returns>
public ImageFormat GetImageFormat(Image img)
{
if (img.RawFormat.Equals(ImageFormat.Jpeg))
{
return ImageFormat.Jpeg;
}
if (img.RawFormat.Equals(ImageFormat.Gif))
{
return ImageFormat.Gif;
}
if (img.RawFormat.Equals(ImageFormat.Png))
{
return ImageFormat.Png;
}
if (img.RawFormat.Equals(ImageFormat.Bmp))
{
return ImageFormat.Bmp;
}
return ImageFormat.Jpeg;//根据实际情况选择返回指定格式还是null
}