额,那个 ImageSharp 的例子不正好就是楼主的意思?那个例子代码如下,分析一下,不难理解是(1)新建输出大图(2)打开小图(3)调整小图尺寸(4)计算小图位置(5)按位置摆放到大图中(6)保存大图。只不过仅有两张图片而已。
[C#] 纯文本查看 复制代码 using (Image<Rgba32> img1 = Image.Load<Rgba32>("source1.png")) // load up source images
using (Image<Rgba32> img2 = Image.Load<Rgba32>("source2.png"))
using (Image<Rgba32> outputImage = new Image<Rgba32>(200, 150)) // create output image of the correct dimensions
{
// reduce source images to correct dimensions
// skip if already correct size
// if you need to use source images else where use Clone and take the result instead
img1.Mutate(o => o.Resize(new Size(100, 150)));
img2.Mutate(o => o.Resize(new Size(100, 150)));
// take the 2 source images and draw them onto the image
outputImage.Mutate(o => o
.DrawImage(img1, new Point(0, 0), 1f) // draw the first one top left
.DrawImage(img2, new Point(100, 0), 1f) // draw the second next to it
);
outputImage.Save("ouput.png");
}
要处理多张图片,可以加入循环,在循环中控制打开图片、调整尺寸、计算位置。如果理解了上面代码的处理过程,处理两张图片和多张图片在本质上没有区别。
[C#] 纯文本查看 复制代码 // 创建输出大图
using (Image<Rgba32> outputImage = new Image<Rgba32>(... , ...))
{
// 循环遍历每张小图
for (int i = 0; ...)
{
// 打开小图
using (Image<Rgba32> img = Image.Load<Rgba32>(" {...} .png"))
{
// 调整尺寸
int width = 10;
int height = 10;
img.Mutate(o => o.Resize(new Size(width, height)));
// 计算位置
int columnCount = 100; // 大图每行放多少个小图
int x = i * width;
int y = (i / columnCount) * height;
// 放到大图
outputImage.Mutate(o => o.DrawImage(img, new Point(x, y), 1f));
}
}
// 保存大图
outputImage.Save("ouput.png");
}
|