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

被折叠的 条评论
为什么被折叠?



