通常用程序生成的缩略图会比正常软件处理的图片模糊,或者是尺寸变化较大时无法显示原图内容。经过一番搜索发现是代码处理的方式不太正确,直接裁剪或在直接缩放容易造成图片变形,显示不全等问题。

该方法需引用组件Magick.NET

处理思路

  1. 先计算出图片的宽高比和要裁剪的尺寸宽高比

  2. 当图片宽高比大于目标尺寸宽高比时,根据高度进行缩放,将原图按比例缩放到目标高度,反之按宽度处理

  3. 图片缩放之后再进行裁剪,即可获得较为清晰的目标图片

代码实现

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