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