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左右

  • 相关阅读:
    字符串的排列
    二叉搜索树与双向链表
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
    从上往下打印二叉树
    python系统编程(一)
    python网络编程(十三)
    python网络编程(十二)
    python网络编程(十一)
  • 原文地址:https://www.cnblogs.com/sczmzx/p/8352426.html
Copyright © 2011-2022 走看看