コード例 #1
0
ファイル: Resize.cs プロジェクト: kwcode/CommonClass
        /// <summary>
        /// 获取缩略图片
        /// 指定当目标缩略图大于原图时 不处理
        /// </summary>
        /// <param name="original_image">原图</param>
        /// <param name="titCase">缩图方式</param>
        /// <param name="target_width">指定目标缩略图的宽度</param>
        /// <param name="target_height">指定目标缩略图的高度</param>
        /// <returns></returns>
        public static Bitmap GetThumbnailImage(Image original_image, ThumbnailImageType titCase, int target_width, int target_height)
        {
            //原图高宽
            int   origin_width = original_image.Width, origin_height = original_image.Height;
            float orignRatio = (float)origin_width / (float)origin_height; //原图 宽高 比例
            int   new_width = target_width, new_height = target_height;    //新图片 宽高
            float target_ratio = (float)target_width / (float)target_height;

            //缩略图生成方式
            switch (titCase)
            {
            //缩放全图到正确比例
            case ThumbnailImageType.Zoom:
            {
                #region 缩图比例
                if (target_width > 0 && target_height <= 0)                         //只有宽
                {
                    new_height = (int)Math.Floor((float)target_width / orignRatio); //只有高
                }
                else if (target_height > 0 && target_width <= 0)
                {
                    new_width = (int)Math.Floor((float)target_height * orignRatio);
                }
                else if (target_width > 0 && target_height > 0)                         //宽高同时限制
                {
                    if (orignRatio > 1)                                                 //宽>高
                    {
                        new_height = (int)Math.Floor((float)target_width / orignRatio); //只有高
                    }
                    else
                    {
                        new_width = (int)Math.Floor((float)target_height * orignRatio);
                    }
                }
                #endregion
            }
            break;
            }



            // 创建缩略图
            Bitmap returnImage = new System.Drawing.Bitmap(new_width, new_height);
            System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(returnImage);
            //指定画布大小并以透明色填充空余部分
            graphic.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.White), new System.Drawing.Rectangle(0, 0, new_width, new_height));

            //设置高质量绘画
            graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            graphic.SmoothingMode     = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

            //输出缩略图
            graphic.DrawImage(original_image, 0, 0, new_width, new_height);

            return(returnImage);
        }
コード例 #2
0
    /// <summary>
    /// 指定大小简单等比缩放图片
    /// </summary>
    /// <param name="original_image"></param>
    /// <param name="new_width"></param>
    /// <returns></returns>
    //public static Bitmap GetSimpleThumbnailImage(Image original_image, int new_width, int new_height)
    //{
    //    NewImageSize imageSize = new NewImageSize(original_image.Width, original_image.Height, new_width, new_height);
    //    Bitmap returnImage = null;
    //    returnImage = new Bitmap(original_image, imageSize.NewWidth, imageSize.NewHeight);
    //    return returnImage;
    //}

    /// <summary>
    /// 根据指定大小绘制高质量缩略图
    /// </summary>
    /// <param name="original_image"></param>
    /// <param name="new_width"></param>
    /// <returns></returns>
    public static Bitmap GetThumbnailImage(Image original_image, ThumbnailImageType titCase, int target_width, int target_height)
    {
        System.Drawing.Graphics graphic = null;
        Bitmap returnImage = null;

        int origin_width = original_image.Width;
        int origin_height = original_image.Height;
        int paste_x = 0, paste_y = 0;

        NewImageSize imageSize = new NewImageSize(original_image.Width, original_image.Height, target_width, target_height);
        int          new_width = imageSize.NewWidth, new_height = imageSize.NewHeight;

        target_width  = imageSize.NewWidth;
        target_height = imageSize.NewHeight;
        float origin_ratio = imageSize.OrignRatio;
        float target_ratio = imageSize.NewRatio;

        //缩略图生成方式
        switch (titCase)
        {
        //缩放全图到正确比例
        case ThumbnailImageType.Zoom:
            if (target_ratio > origin_ratio)
            {
                //较宽图片
                new_height = (int)Math.Floor((float)target_width / origin_ratio);
                new_width  = target_width;
            }
            else
            {
                //较高图片
                new_height = target_height;
                new_width  = (int)Math.Floor(origin_ratio * (float)target_height);
            }

            new_width  = new_width > target_width ? target_width : new_width;
            new_height = new_height > target_height ? target_height : new_height;
            break;

        //截取高宽比中间部分
        case ThumbnailImageType.Cut:
            if (target_ratio > origin_ratio)
            {
                //较高图片
                new_height = (int)Math.Floor((float)target_width / origin_ratio);
                new_width  = target_width;
            }
            else
            {
                //较宽图片
                new_height = target_height;
                new_width  = (int)Math.Floor(origin_ratio * (float)target_height);
            }
            break;
        }

        paste_x = (target_width - new_width) / 2;
        paste_y = (target_height - new_height) / 2;

        // 创建缩略图
        returnImage = new System.Drawing.Bitmap(target_width, target_height);

        graphic = System.Drawing.Graphics.FromImage(returnImage);
        //指定画布大小并以透明色填充空余部分
        graphic.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.White), new System.Drawing.Rectangle(0, 0, target_width, target_height));

        //设置高质量绘画
        graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        graphic.SmoothingMode     = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

        //输出缩略图
        graphic.DrawImage(original_image, paste_x, paste_y, new_width, new_height);

        return(returnImage);
    }