コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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));
        }