首页 > 编程语言 >C# 获取图片缩略图

C# 获取图片缩略图

时间:2023-08-03 15:26:06浏览次数:31  
标签:tem Width C# 缩略图 iSource 获取 var destWidth size


/// <summary>
/// 获取图片缩略图
/// </summary>
/// <param name="iSource">原图片</param>
/// <param name="destFile">保存路径</param>
/// <param name="destHeight">目标高度</param>
/// <param name="destWidth">目标宽度</param>
/// <param name="flag">设置压缩的比例1-100</param>
/// <returns></returns>

private static bool GetPicThumbnail(Image iSource, string destFile, int destHeight, int destWidth, int flag)
    {
        var tFormat = iSource.RawFormat;
        int sW = 0, sH = 0;

        //按比例缩放
        var tem_size = new Size(iSource.Width, iSource.Height);
        if (tem_size.Width > destHeight || tem_size.Width > destWidth)
        {
            if (tem_size.Width * destHeight > tem_size.Height * destWidth)
            {
                sW = destWidth;
                sH = destWidth * tem_size.Height / tem_size.Width;
            }
            else
            {
                sH = destHeight;
                sW = tem_size.Width * destHeight / tem_size.Height;
            }
        }
        else
        {
            sW = tem_size.Width;
            sH = tem_size.Height;
        }

        var ob = new Bitmap(destWidth, destHeight);
        var g = Graphics.FromImage(ob);
        g.Clear(Color.WhiteSmoke);
        g.CompositingQuality = CompositingQuality.HighQuality;
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.DrawImage(iSource, new Rectangle((destWidth - sW) / 2, (destHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);
        g.Dispose();

        //以下代码为保存图片时,设置压缩质量
        var ep = new EncoderParameters();
        var qy = new long[1];
        qy[0] = flag;//设置压缩的比例1-100
        var eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
        ep.Param[0] = eParam;

        try
        {
            var arrayICI = ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo jpegICIinfo = null;
            for (int x = 0; x < arrayICI.Length; x++)
            {
                if (arrayICI[x].FormatDescription.Equals("JPEG"))
                {
                    jpegICIinfo = arrayICI[x];
                    break;
                }
            }

            if (jpegICIinfo != null)
                ob.Save(destFile, jpegICIinfo, ep);//dFile是压缩后的新路径
            else
                ob.Save(destFile, tFormat);

            return true;
        }
        catch
        {
            return false;
        }
        finally
        {
            iSource.Dispose();
            ob.Dispose();
        }
    }

 

标签:tem,Width,C#,缩略图,iSource,获取,var,destWidth,size
From: https://www.cnblogs.com/huanglg/p/17603409.html

相关文章

  • CS客户端内嵌WebApi
    突然一天WPF客户端紧急需要一个功能被远程控制,于是第一想法便就是客户端充当服务身份。于是便客户的后台控制想法需求便出来了。记录一下工作上简单实现。publicclassWebApiHost{staticWebApplicationwebApp=null;publicstaticvoidStartWebA......
  • AddMvcCore,AddControllers,AddControllersWithViews,AddRazorPages的区别
    AddMvc/AddMvcCore/AddControllers等区别1.services.AddMvcCore()只注册运行 Controller/RazorPages 必要的核心服务,确保 Pipeline 程序可动作,其馀如像 DataAnnotationModelValidation、身分验证等服务要自己加挂,除有特殊客制需求,一般不太常用。2.services.AddControl......
  • SnapGene - DNA序列生物分析 5.3.1 mac/win版
    SnapGene是一款用于DNA序列分析和生物学实验设计的专业软件。它提供了强大的功能和直观的界面,帮助科学家和研究人员在分子生物学领域进行高效的实验规划和分析。下面将为您详细介绍SnapGene的特点和功能。点击获取SnapGenemac/win版 DNA序列编辑:SnapGene提供了易于......
  • Pycharm配置less编译生成的css文件到指定目录
    一、当前演示项目目录二、标记less文件夹为资源目录不标记其实也不影响三、打开FileWatchers(文件监视器)在主菜单中选择"File"(文件)>"Settings"(设置)(Windows/Linux)或"PyCharm"(Windows)/"Preferences"(Mac)或者使用快捷键"Ctrl+Alt+S"(Windows/Linux)或&qu......
  • Native Instruments Kontakt 7 - 专业音频采样器mac/win版
    NativeInstrumentsKontakt7是一款专业音频采样器,被广泛用于音乐制作、音频设计和声音效果制作等领域。它提供了丰富的采样库和强大的编辑功能,使用户可以创建出高质量的音频效果和音乐作品。下面将详细介绍Kontakt7的特点和功能。点击获取Kontakt7 大量采样库:Kontak......
  • 遇到:ValueError: not enough values to unpack (expected 2, got 1) 错误应该如何解决
    遇到"ValueError:notenoughvaluestounpack(expected2,got1)"错误时,通常是因为你在尝试解包(unpack)一个包含不足两个值的可迭代对象。要解决这个问题,你可以考虑以下几个步骤:检查可迭代对象的长度:确保你的可迭代对象包含至少两个值。如果你的可迭代对象只有一个值,那么解包......
  • 遇到:nodejs unhandledPromiseRejectionWarning 错误应该如何解决
    遇到"unhandledPromiseRejectionWarning"错误是因为在Node.js中,一个Promise被rejected了,但是没有被处理(handled)。这可能是因为你没有使用适当的错误处理机制,导致Promise的rejected状态没有被捕获。要解决这个问题,你可以考虑以下几个步骤:使用catch方法捕获错误:在你的......
  • 8-3|org.logicalcobwebs.proxool.default - Shutting down 'default' pool immediatel
    org.logicalcobwebs.proxool.default-Shuttingdown'default'poolimmediately[ShutdownHook]"org.logicalcobwebs.proxool.default-Shuttingdown'default'poolimmediately[ShutdownHook]"是一个程序日志的输出,特别是涉及到一个名为'default......
  • VS Code迎来劲敌JB Code!Jetbrains推出新一代智能IDE:Fleet
    IntelliJIDEA的缔造者Jetbrains多次被问到:“JetBrains什么时候会创建一个轻量级编辑器?”此次JetBrains终于给出了答案。Jetbrains以20年的IDE开发经验为基础从头构建Fleet,使用了IntelliJ代码处理引擎,具有分布式IDE架构和重新设计的UI,让我们一起来看看这款轻量级打造的新......
  • Chat GPT是什么,初学者使用Chat GPT,需要注意些什么
    ChatGPT是什么ChatGPT是由OpenAI开发的一种大型语言模型,它基于GPT(GenerativePre-trainedTransformer)架构。GPT是一种基于深度学习的预训练模型,通过在大规模文本数据上进行训练,学习了语言的统计规律和语义信息。ChatGPT专注于对话式交互,它可以接收用户的输入,并生成相应的回复......