Exemplo n.º 1
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));
        }
Exemplo n.º 2
0
        /// <summary>
        /// 设置缩略图的水印
        /// </summary>
        private static void SetThumbnailWaterImage(bool isaddwatermark, string waterImagePath, WatermarkImagesPosition imagePosition, Graphics g, int cutedWidth, int cutedHeight)
        {
            if (isaddwatermark)
            {
                Image _waterImage = Image.FromFile(waterImagePath);
                int   _xPosOfWm;
                int   _yPosOfWm;
                int   _wmHeight = _waterImage.Height;
                int   _wmWidth  = _waterImage.Width;
                int   _phHeight = cutedHeight;
                int   _phWidth  = cutedWidth;

                switch (imagePosition)
                {
                case WatermarkImagesPosition.LeftBottom:
                    _xPosOfWm = 70;
                    _yPosOfWm = _phHeight - _wmHeight - 70;
                    break;

                case WatermarkImagesPosition.LeftTop:
                    _xPosOfWm = 70;
                    _yPosOfWm = 0 - 70;
                    break;

                case WatermarkImagesPosition.RightTop:
                    _xPosOfWm = _phWidth - _wmWidth - 70;
                    _yPosOfWm = 0 - 70;
                    break;

                case WatermarkImagesPosition.RigthBottom:
                    _xPosOfWm = _phWidth - _wmWidth - 70;
                    _yPosOfWm = _phHeight - _wmHeight - 70;
                    break;

                default:
                    _xPosOfWm = 10;
                    _yPosOfWm = 0;
                    break;
                }

                g.DrawImage(_waterImage, new Rectangle(_xPosOfWm, _yPosOfWm, _waterImage.Width, _waterImage.Height), 0, 0, _waterImage.Width, _waterImage.Height, GraphicsUnit.Pixel);
            }
        }