gpt4 book ai didi

java - 如何使用 Marvin java 库(或任何其他免费库)附加 2 个大图像?

转载 作者:行者123 更新时间:2023-12-02 01:33:37 24 4
gpt4 key购买 nike

我有 2 个 jpeg,大约 16 000 x 24 000 像素。我必须旋转第二个并将其附加在第一个之上,就像这样

enter image description here .

我在文档中找到了如何旋转 (MarvinImage.rotate),但我还没有找到可以附加 2 个图像的方法。

此外,也非常感谢其他可以做到这一点的库的任何建议。到目前为止我已经尝试过:

  • BufferedImage 和 ImageIO:占用大量内存,如果写入有效,可能会起作用(JPEGImageWriter 基本上提示图像太大 - 整数溢出)

  • ImageMagick 和 im4java - 可以工作,但速度非常慢(13 分钟,磁盘使用率 100%)

谢谢!

博格丹

最佳答案

libvips可以快速完成此操作并占用很少的内存,但不幸的是没有方便的 Java 绑定(bind)。您需要使用类似 pyvips 编写几行然后掏钱去做。

例如:

import sys
import pyvips

one = pyvips.Image.new_from_file(sys.argv[1])
two = pyvips.Image.new_from_file(sys.argv[2], access='sequential')
one.rot180().join(two, 'vertical').write_to_file(sys.argv[3])

new_from_file 上的 access= 提示in two 表示我们计划从上到下读取第二张图像,即。像素在 jpg 文件中出现的顺序相同。这将使 libvips 流式传输该图像,因此它可以将 two 的解码与输出图像的写入重叠。

在这台 2015 年笔记本电脑上,我看到:

$ vipsheader ~/pics/top.jpg ~/pics/bot.jpg
/home/john/pics/top.jpg: 16000x24000 uchar, 3 bands, srgb, jpegload
/home/john/pics/bot.jpg: 16000x24000 uchar, 3 bands, srgb, jpegload
$ /usr/bin/time -f %M:%e ./join.py ~/pics/top.jpg ~/pics/bot.jpg x.jpg
115236:27.85
$ vipsheader x.jpg
x.jpg: 16000x48000 uchar, 3 bands, srgb, jpegload

内存峰值为 115MB,实时运行时间为 28 秒。

这将为one创建一个临时文件,以便它可以进行旋转。如果您可以使用大量内存,您可以尝试:

one = pyvips.Image.new_from_file(sys.argv[2], memory=True)

这将强制 libvips 通过内存区域打开。我现在看到:

$ /usr/bin/time -f %M:%e ./join.py ~/pics/top.jpg ~/pics/bot.jpg x.jpg
1216812:14.53

只有 15 秒的实时时间,但却痛苦地使用了 1.2GB 峰值内存。

关于java - 如何使用 Marvin java 库(或任何其他免费库)附加 2 个大图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55616116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com