ilovecomputer66 发表于 2022-8-27 08:58

C# .net下,求推荐好用的图片拼接库。只要有图片无损拼接功能即可,无需各种图像处理

C# .net下,求推荐好用的图片拼接库。只要有图片无损拼接功能即可,无需各种图像处理

xzqsr 发表于 2022-8-27 12:07

本帖最后由 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

ilovecomputer66 发表于 2022-8-28 06:51

xzqsr 发表于 2022-8-27 12:07
可以使用 Magick.NET 无损操作图片,不仅可以拼接,也可以进行各种处理
https://github.com/dlemstra/Magi ...

太感谢了

ilovecomputer66 发表于 2022-8-28 10:03

xzqsr 发表于 2022-8-27 12:07
可以使用 Magick.NET 无损操作图片,不仅可以拼接,也可以进行各种处理
https://github.com/dlemstra/Magi ...

不过兄弟,它这个例子有点简单了。

我要拼接的实际需求这样的:我这边有十几万个icon(公司做的),大小都是20*20的正方形。
然后让我每100个,10*10放置,拼接为一个大图保存下载,作为一张公司产品宣传大图

xzqsr 发表于 2022-8-28 14:34

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");
}


ilovecomputer66 发表于 2022-8-29 04:48

xzqsr 发表于 2022-8-28 14:34
额,那个 ImageSharp 的例子不正好就是楼主的意思?那个例子代码如下,分析一下,不难理解是(1)新建输 ...

非常感谢。调整尺寸这个可以略过的吧?我只需要原图大小拼接

xzqsr 发表于 2022-8-29 19:12

ilovecomputer66 发表于 2022-8-29 04:48
非常感谢。调整尺寸这个可以略过的吧?我只需要原图大小拼接

当然啊,你需要什么功能就写什么代码,不需要的功能就不要写了,没有说必须做哪步,必须不做哪步。原图拼接就直接拼就行了,无需再调整大小。
页: [1]
查看完整版本: C# .net下,求推荐好用的图片拼接库。只要有图片无损拼接功能即可,无需各种图像处理