/// <summary>
/// 获取视频封面图
/// </summary>
/// <param name="imgName"></param>
/// <param name="width"></param>
/// <returns></returns>
[HttpGet("{height}/{width}/{imgName}")]
public async Task<IActionResult> Thumbnails([FromRoute] string imgName, [FromRoute] int height, [FromRoute] int width)
{
string filePath = Path.Combine(webHostEnvironment.WebRootPath, webConfigModel.Value.ThumbnailFolderName, imgName);
if (!System.IO.File.Exists(filePath))
{
return Content("文件不存在");
}
FileResult result;
return await Task.Run(() =>
{
if (width <= 0)
{
//原样返回
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
result = File(fileStream, "image/jpeg", true);
return result;
}
var bytes = ImageHelper.GetPicThumbnail(filePath, height, width,80);
result = new FileContentResult(bytes, "image/jpeg");
return result;
});
}
ImageHelper代码如下
/// <summary>
/// 图片帮助类
/// </summary>
public class ImageHelper
{
/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="sFile">原图路径</param>
/// <param name="dFile">生成的缩略图路径</param>
/// <param name="dHeight">缩略图高度</param>
/// <param name="dWidth">缩略图宽度</param>
/// <param name="flag">压缩质量</param>
/// <returns></returns>
public static byte[] GetPicThumbnail(string sFile, int dHeight, int dWidth, int flag)
{
Bitmap ob = null;
System.Drawing.Image iSource = null;
MemoryStream thumbnailStream = null;
try
{
iSource = System.Drawing.Image.FromFile(sFile);
System.Drawing.Imaging.ImageFormat tFormat = iSource.RawFormat;
int sW = 0, sH = 0;
if (dWidth == 0 && dHeight == 0)
{
dWidth = iSource.Width;
dHeight = iSource.Height;
}
//按比例缩放
if (iSource.Width > dWidth || iSource.Height > dHeight)
{
if ((iSource.Width * dHeight) > (iSource.Height * dWidth))
{
sW = dWidth;
sH = (dWidth * iSource.Height) / iSource.Width;
}
else
{
sH = dHeight;
sW = (iSource.Width * dHeight) / iSource.Height;
}
}
else
{
sW = iSource.Width;
sH = iSource.Height;
}
ob = new System.Drawing.Bitmap(dWidth, dHeight);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(ob);
g.Clear(System.Drawing.Color.White);//设置背景颜色
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
var rect = new System.Drawing.Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH);
g.DrawImage(iSource, rect, 0, 0, iSource.Width, iSource.Height, System.Drawing.GraphicsUnit.Pixel);
g.Dispose();
//以下代码为保存图片时,设置压缩质量
System.Drawing.Imaging.EncoderParameters ep = new System.Drawing.Imaging.EncoderParameters();
long[] qy = new long[1];
qy[0] = flag;//设置压缩的比例1-100
System.Drawing.Imaging.EncoderParameter eParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
ep.Param[0] = eParam;
System.Drawing.Imaging.ImageCodecInfo[] arrayICI = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
System.Drawing.Imaging.ImageCodecInfo jpegICIinfo = null;
for (int x = 0; x < arrayICI.Length; x++)
{
if (arrayICI[x].FormatDescription.Equals("JPEG"))
{
jpegICIinfo = arrayICI[x];
break;
}
}
var stream = new MemoryStream();
if (jpegICIinfo != null)
{
ob.Save(stream, jpegICIinfo, ep);//dFile是压缩后的新路径
}
else
{
ob.Save(stream, tFormat);
}
return stream.GetBuffer();
}
catch
{
return null;
}
finally
{
iSource?.Dispose();
ob?.Dispose();
thumbnailStream?.Close();
}
}
}