C# 图片缩放并居中实践

写在前面

这两天在做的一个功能需要用到一批图片素材,由于收到的图片资源分辨率大小不一,需要统一缩放成标准的尺寸,不想占用美术的时间于是就准备花几分钟做个小工具处理一下,以后也可以用上;最近某度出了文心一言刚好拿来试一下趁不趁手,用的是免费的3.5版本。

输入提示词:用C# 写一个图片缩放并居中的示例

主要代码

        public static Image ResizeImage(Image imgToResize, Size size)
        {
            int sourceWidth = imgToResize.Width;
            int sourceHeight = imgToResize.Height;

            float nPercent = 0;
            float nPercentW = ((float)size.Width / (float)sourceWidth);
            float nPercentH = ((float)size.Height / (float)sourceHeight);

            if (nPercentH < nPercentW)
                nPercent = nPercentH;
            else
                nPercent = nPercentW;

            int destWidth = (int)(sourceWidth * nPercent);
            int destHeight = (int)(sourceHeight * nPercent);

            Bitmap b = new Bitmap(size.Width, size.Height);
            Graphics g = Graphics.FromImage(b);
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

            // 绘制并做居中处理
            g.DrawImage(imgToResize, (size.Width - destWidth) / 2, (size.Height - destHeight) / 2, destWidth, destHeight);
            g.Dispose();

            return b;
        }

除了添加注释的那行有做调整外,其他完全是由模型生成的,完成度还是非常高的。

            var sourceDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Source");
            var targetDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Result");

            try
            {
                if (Directory.Exists(sourceDir))
                {
                    if (!Directory.Exists(targetDir))
                    {
                        Directory.CreateDirectory(targetDir);
                    }
                    var sourceImgs = Directory.GetFiles(sourceDir, "*.png");
                    foreach (var imgFile in sourceImgs)
                    {
                        using (var sourceImg = Image.FromFile(imgFile))
                        {
                            // GDI+中发生一般性错误的解决办法
                            var targetImg = ImageHelper.ResizeImage(sourceImg, new Size(130, 130));
                            //var bakImg = new Bitmap(targetImg.Width, targetImg.Height);
                            //var g = Graphics.FromImage(bakImg);
                            //g.DrawImage(targetImg, 0, 0);
                            //targetImg.Dispose();
                            var targetFile = Path.Combine(targetDir, Path.GetFileName(imgFile));
                            //bakImg.Save(targetFile, ImageFormat.Png);
                            //bakImg.Dispose();
                            targetImg.Save(targetFile, ImageFormat.Png);
                            targetImg.Dispose();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }

在控制台程序入口处加几行代码指定一下目标文件目录和结果文件目录,就搞定了。

 总结

在AI的辅助下进行编程是必然的趋势,生产效率肯定会大大的提升,拥抱并驾驭AI吧。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值