asp.net core webapi返回可修改参数和压缩的图片

/// <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();
		}
	}
}

参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

假装我不帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值