zoukankan      html  css  js  c++  java
  • c# 创建缩略图

            /// <summary>
            /// 创建缩略图
            /// </summary>
            /// <param name="srcFileName"></param>
            /// <param name="destFileName"></param>
            private static void CreateThumbnailImage(string srcFileName, string destFileName)
            {
                using (var img = new Bitmap(srcFileName))
                {
                    Size originalSize = new Size(img.Width, img.Height);
                    Size targetSize = new Size(300, 300);
                    targetSize = CalculateNewImageSize(originalSize, targetSize);
                    using (
                        var bitmap = new Bitmap(targetSize.Width, targetSize.Height, PixelFormat.Format32bppArgb))
                    {
                        using (Graphics g = Graphics.FromImage(bitmap))
                        {
                            g.InterpolationMode = InterpolationMode.Low;
                            using (var wrapmode = new ImageAttributes())
                            {
                                wrapmode.SetWrapMode(WrapMode.TileFlipXY);
                                g.DrawImage(img, new Rectangle(0, 0, targetSize.Width, targetSize.Height),
                                    0, 0,
                                    img.Width,
                                    img.Height,
                                    GraphicsUnit.Pixel,
                                    wrapmode);
                            }
                        }
                        bitmap.Save(destFileName);
                    }
                }
            }
    
            /// <summary>
            /// 计算缩略图的尺寸
            /// </summary>
            /// <param name="originalSize"></param>
            /// <param name="targetSize"></param>
            /// <returns></returns>
            private static Size CalculateNewImageSize(Size originalSize, Size targetSize)
            {
                if (originalSize.Width <= targetSize.Width&&
                    originalSize.Height<=targetSize.Height)
                {
                    //目标尺寸比原尺寸大,那么直接使用原尺寸
                    return originalSize;
                }
    
                double targetRatio = GetRatio(targetSize);
                double originalRatio = GetRatio(originalSize);
    
                var size = new Size(targetSize.Width, targetSize.Height);
    
                if (originalRatio < targetRatio)
                {
                    size.Width = (originalSize.Width*targetSize.Height)/originalSize.Height;
                }
                else
                {
                    size.Height = (originalSize.Height*targetSize.Width)/originalSize.Width;
                }
    
                return size;
            }
    
            private static double GetRatio(Size size)
            {
                return (double) size.Width/size.Height;
            }

    支持大文件的缩略图,800M的bmp图片缩放到300*300大概100kb左右

  • 相关阅读:
    linux查看java jdk安装路径和设置环境变量
    linq where in 排序
    Console程序后台运行
    winform中文本框,软键盘跟随
    winform 应用log4net做日志记录到mysql
    c# 单实例运行
    Sql Server数据库监听 c#代码
    winform程序开机自动启动
    c# 连接mysql配置config,不用装net connector
    winform 不规则窗体无锯齿demo
  • 原文地址:https://www.cnblogs.com/sczmzx/p/8352426.html
Copyright © 2011-2022 走看看