如何以编程方式 (Python/JS/C++) 将矢量图形 (SVG) 插入 JPG/TIF 等光栅图像?

Posted

技术标签:

【中文标题】如何以编程方式 (Python/JS/C++) 将矢量图形 (SVG) 插入 JPG/TIF 等光栅图像?【英文标题】:How to insert vector graphics (SVG) to a raster image such as JPG/TIF programmatically (Python/JS/C++)? 【发布时间】:2021-02-18 15:10:11 【问题描述】:

我需要一种编程方式将剪切路径(另存为 SVG 文件)嵌入到另一个图像,例如 JPG/TIF/PSD。使用 Photoshop 等工具可以轻松完成此操作,并且路径将插入到图像 8BIM 配置文件中,但似乎无法以编程方式完成。 ImageMagick 允许您使用以下命令获取矢量图像:

identify -format "%[8BIM:1999,2998:#1]" test.jpg > test.svg

但似乎无法进行反向操作并添加矢量图像。任何人都可以建议任何允许此操作的库吗?

【问题讨论】:

插入 JPEG 可能更容易,因为这些片段是独立的,并且与 TIFF 不同,TIFF 的偏移量会因插入新的 8BIM 块而混乱。 请考虑与嵌入式 8BIM 配置文件共享一些示例文件 - 可能通过 Dropbox 或 Google Drive,因为 imgur 会删除/修改它们。 当然,在这里你可以找到一个非常小的正方形的图片,有8BIM路径和没有路径,路径也以svg文件的形式提供:drive.google.com/drive/folders/… 【参考方案1】:

目前的代码比我想写的要多一些,但应该可以使用以下信息将 8BIM 放入 JPEG。

描述了 JPEG 的解剖结构 here 和 here。

您可以使用 PIL 或 OpenCV 将 JPEG 编码到内存缓冲区中,然后使用 this 之类的代码定位和修改/添加段(例如 8BIM)。或者,您可以在要修改的现有 JPEG 中只使用 read()。要插入片段,只需将前几个片段写入磁盘,然后写入新片段,然后写入您在开始时读取的现有文件中的剩余片段。

您可以使用this 答案构建要插入的 8BIM 段。

您可以使用exiftool -v -v -v 查看 8BIM 在 Photoshop 创建的 JPEG 中出现的位置,然后将您的放在类似的位置。显然,您也可以同样使用 exiftool 来查看您自己的尝试在哪里/如何着陆。

【讨论】:

以上是关于如何以编程方式 (Python/JS/C++) 将矢量图形 (SVG) 插入 JPG/TIF 等光栅图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将空间添加到任务控制?

如何以编程方式将活动主题化为对话?

如何以编程方式将元素添加到 ConfigurationElementCollection?

如何在 Swift 中以编程方式将 UILabel 对象居中?

如何以编程方式将 UIImageView 添加到 UIStackView(故事板)

如何以编程方式将 Google Sheet 脚本发布/部署为 API 可执行文件?