private void MakeThumbnail(string filePath, string suffix, int width, int height, ThumbnailImageCutMode mode) { string fileExt = filePath.Substring(filePath.LastIndexOf('.')); string fileHead = filePath.Substring(0, filePath.LastIndexOf('.')); var thumbPath = string.Format("{0}_{1}{2}", fileHead, suffix, fileExt); ThumbnailHelper.BuilderThumbnail(filePath, thumbPath, width, height, mode, false, 88); }
/// <summary> /// 即时生成缩略图 /// </summary> /// <param name="originalImagePath">原始图片路径</param> /// <param name="thumbnailPath">水印图片路径</param> /// <param name="width">宽度</param> /// <param name="height">高度</param> /// <param name="mode">缩略图模式</param> /// <param name="isaddwatermark">是否添加水印</param> /// <param name="quality">图片质量</param> public static void BuilderThumbnail(string originalImagePath, string thumbnailPath, int width, int height, ThumbnailImageCutMode mode, bool isaddwatermark, int quality) { ThumbnailSize _size = new ThumbnailSize() { Width = width, Height = height, Mode = mode, AddWaterMarker = isaddwatermark, Quality = quality }; BuilderThumbnail(originalImagePath, thumbnailPath, _size); }
/// <summary> /// 生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径(物理路径)</param> /// <param name="thumbnailPath">缩略图路径(物理路径)</param> /// <param name="specifiedwidth">缩略图宽度</param> /// <param name="specifiedheight">缩略图高度</param> /// <param name="mode">生成缩略图的方式</param> /// <param name="isaddwatermark">是否添加水印</param> /// <param name="quality">图片品质</param> /// <param name="imagePosition">水印位置</param> /// <param name="waterImagePath">水印图片路径(物理路径)</param> public static OperatedResult <string> BuilderThumbnails(string originalImagePath, string thumbnailPath, int specifiedwidth, int specifiedheight, ThumbnailImageCutMode mode, bool isaddwatermark, WatermarkImagesPosition imagePosition, string waterImagePath, int quality) { CheckResult _checkedThumbnailsParamter = CheckedThumbnailsParamter(originalImagePath, thumbnailPath, isaddwatermark, waterImagePath); if (!_checkedThumbnailsParamter.State) { return(OperatedResult <string> .Fail(_checkedThumbnailsParamter.Message)); } Image _originalImage = Image.FromFile(originalImagePath); int _cutedWidth = specifiedwidth; int _cutedHeight = specifiedheight; int x = 0; int y = 0; int _originalWidth = _originalImage.Width; int _originalHeigh = _originalImage.Height; switch (mode) { case ThumbnailImageCutMode.W: //指定宽,高按比例 _cutedHeight = _originalImage.Height * specifiedwidth / _originalImage.Width; break; case ThumbnailImageCutMode.H: //指定高,宽按比例 _cutedWidth = _originalImage.Width * specifiedheight / _originalImage.Height; break; case ThumbnailImageCutMode.Cut: //指定高宽裁减(不变形) if (_originalImage.Width >= _cutedWidth && _originalImage.Height >= _cutedHeight) { if ((double)_originalImage.Width / (double)_originalImage.Height > (double)_cutedWidth / (double)_cutedHeight) { _originalHeigh = _originalImage.Height; _originalWidth = _originalImage.Height * _cutedWidth / _cutedHeight; y = 0; x = (_originalImage.Width - _originalWidth) / 2; } else { _originalWidth = _originalImage.Width; _originalHeigh = _originalImage.Width * specifiedheight / _cutedWidth; x = 0; y = (_originalImage.Height - _originalHeigh) / 2; } } else { x = (_originalImage.Width - _cutedWidth) / 2; y = (_originalImage.Height - _cutedHeight) / 2; _originalWidth = _cutedWidth; _originalHeigh = _cutedHeight; } break; case ThumbnailImageCutMode.Fit: //不超出尺寸,比它小就不截了,不留白,大就缩小到最佳尺寸,主要为手机用 if (_originalImage.Width > _cutedWidth && _originalImage.Height > _cutedHeight) { if ((double)_originalImage.Width / (double)_originalImage.Height > (double)_cutedWidth / (double)_cutedHeight) { _cutedHeight = _originalImage.Height * specifiedwidth / _originalImage.Width; } else { _cutedWidth = _originalImage.Width * specifiedheight / _originalImage.Height; } } else if (_originalImage.Width > _cutedWidth) { _cutedHeight = _originalImage.Height * specifiedwidth / _originalImage.Width; } else if (_originalImage.Height > _cutedHeight) { _cutedWidth = _originalImage.Width * specifiedheight / _originalImage.Height; } else { _cutedWidth = _originalImage.Width; _cutedHeight = _originalImage.Height; _originalWidth = _cutedWidth; _originalHeigh = _cutedHeight; } break; default: break; } Image _thumbnailImage = new Bitmap(_cutedWidth, _cutedHeight); Graphics _g = SetThumbnailGraphics(_originalImage, _thumbnailImage, _cutedWidth, _cutedHeight, _originalWidth, _originalHeigh, x, y); try { SetThumbnailWaterImage(isaddwatermark, waterImagePath, imagePosition, _g, _cutedWidth, _cutedHeight); EncoderParameters _encoderParams = null; ImageCodecInfo _jpegICI = SetThumbnailImageQuality(quality, out _encoderParams); SaveThumbnailImage(thumbnailPath, _thumbnailImage, _jpegICI, _encoderParams); } catch (Exception ex) { OperatedResult <string> .Fail(string.Format("生成缩略图失败,原因:{0}", ex.Message)); } finally { _originalImage.Dispose(); _thumbnailImage.Dispose(); _g.Dispose(); } return(OperatedResult <string> .Success(string.Format("生成{0}的缩略图成功", originalImagePath), thumbnailPath)); }