吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1673|回复: 6
收起左侧

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

[复制链接]
ilovecomputer66 发表于 2022-8-27 08:58
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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ilovecomputer66 + 1 + 1 非常感谢

查看全部评分

 楼主| 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)保存大图。只不过仅有两张图片而已。

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



免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ilovecomputer66 + 1 + 1 不得不再赞一下兄弟的热心

查看全部评分

 楼主| 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
非常感谢。调整尺寸这个可以略过的吧?我只需要原图大小拼接

当然啊,你需要什么功能就写什么代码,不需要的功能就不要写了,没有说必须做哪步,必须不做哪步。原图拼接就直接拼就行了,无需再调整大小。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表