C# .net下,求推荐好用的图片拼接库。只要有图片无损拼接功能即可,无需各种图像处理
C# .net下,求推荐好用的图片拼接库。只要有图片无损拼接功能即可,无需各种图像处理 本帖最后由 xzqsr 于 2022-8-27 12:16 编辑可以使用 Magick.NET 无损操作图片,不仅可以拼接,也可以进行各种处理
https://github.com/dlemstra/Magick.NET
http://www.imagemagick.org/
我想楼主所指的拼接应该是设置图片相对位置的意思,可以参考如下方法来操作
https://legacy.imagemagick.org/discourse-server/viewtopic.php?p=54948#p54948
https://stackoverflow.com/questions/57840416/why-is-it-wrong-when-i-want-merging-two-large-tiff-images-with-c
--------------------------------
此外,还可以使用 ImageSharp,也是个强大的图像处理库
https://github.com/SixLabors/ImageSharp
https://sixlabors.com/products/imagesharp/
根据我理解的楼主的拼接,可以参考如下方法,代码简单易懂
https://stackoverflow.com/questions/50860392/how-to-combine-two-images
xzqsr 发表于 2022-8-27 12:07
可以使用 Magick.NET 无损操作图片,不仅可以拼接,也可以进行各种处理
https://github.com/dlemstra/Magi ...
太感谢了 xzqsr 发表于 2022-8-27 12:07
可以使用 Magick.NET 无损操作图片,不仅可以拼接,也可以进行各种处理
https://github.com/dlemstra/Magi ...
不过兄弟,它这个例子有点简单了。
我要拼接的实际需求这样的:我这边有十几万个icon(公司做的),大小都是20*20的正方形。
然后让我每100个,10*10放置,拼接为一个大图保存下载,作为一张公司产品宣传大图 ilovecomputer66 发表于 2022-8-28 10:03
不过兄弟,它这个例子有点简单了。
我要拼接的实际需求这样的:我这边有十几万个icon(公司做的),大 ...
额,那个 ImageSharp 的例子不正好就是楼主的意思?那个例子代码如下,分析一下,不难理解是(1)新建输出大图(2)打开小图(3)调整小图尺寸(4)计算小图位置(5)按位置摆放到大图中(6)保存大图。只不过仅有两张图片而已。
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");
}
要处理多张图片,可以加入循环,在循环中控制打开图片、调整尺寸、计算位置。如果理解了上面代码的处理过程,处理两张图片和多张图片在本质上没有区别。
// 创建输出大图
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");
}
xzqsr 发表于 2022-8-28 14:34
额,那个 ImageSharp 的例子不正好就是楼主的意思?那个例子代码如下,分析一下,不难理解是(1)新建输 ...
非常感谢。调整尺寸这个可以略过的吧?我只需要原图大小拼接 ilovecomputer66 发表于 2022-8-29 04:48
非常感谢。调整尺寸这个可以略过的吧?我只需要原图大小拼接
当然啊,你需要什么功能就写什么代码,不需要的功能就不要写了,没有说必须做哪步,必须不做哪步。原图拼接就直接拼就行了,无需再调整大小。
页:
[1]