通常用程序生成的缩略图会比正常软件处理的图片模糊,或者是尺寸变化较大时无法显示原图内容。经过一番搜索发现是代码处理的方式不太正确,直接裁剪或在直接缩放容易造成图片变形,显示不全等问题。
该方法需引用组件Magick.NET
处理思路
- 先计算出图片的宽高比和要裁剪的尺寸宽高比
- 当图片宽高比大于目标尺寸宽高比时,根据高度进行缩放,将原图按比例缩放到目标高度,反之按宽度处理
- 图片缩放之后再进行裁剪,即可获得较为清晰的目标图片
代码实现
/// <summary>
/// 裁切图片
/// </summary>
/// <param name="imagePath">图片路径</param>
/// <param name="width">裁剪宽度</param>
/// <param name="height">裁剪高度</param>
/// <param name="isCreateNew">是否另存</param>
private void CutImage(string imagePath, int width, int height, bool isCreateNew = false)
{
using (MagickImage image = new MagickImage(imagePath))
{
if (isCreateNew == true)
{
imagePath = imagePath.Insert(imagePath.Length - 4, "_" + width + "_" + height);
}
//压缩图片 根据需求调整大小 0-100
image.Quality = 80;
var cutWh = width * 1.00 / height;
var originWh = image.Width * 1.00 / image.Height;
if (cutWh > originWh)
//对比宽高比
if (width / height > image.Width / image.Height)
{
image.Resize(width, width / image.Width * image.Height);
}
else
{
image.Resize(height / image.Height * image.Width, height);
}
//裁剪
image.Crop(width, height);
//清除多余信息
image.Strip();
//保存图片
image.Write(imagePath);
};
}