Вы не говорите, насколько велики изображения, которые вы планируете сделать, но если они очень большие, вы можете столкнуться с несколькими проблемами.
Во-первых, JPEG ограничен 65536 x 65536пикселей, поэтому вам понадобится что-то вроде bigtiff или PNG, если вам нужно больше.
Во-вторых, вам может понадобиться огромное количество памяти для создания больших изображений.Например, на этом ноутбуке я могу запустить:
$ time convert -size 50000x50000 tile:k2.jpg result.jpg
real 6m11.366s
user 1m19.671s
sys 0m20.836s
, чтобы сделать JPG размером 50k x 50k пикселей примерно за 6 м.
convert
соберет все изображение, прежде чем оно начнет писатьрезультат.Если у вас нет загрузок ОЗУ, вместо этого будет использоваться огромный временный файл.Если во время обработки я смотрю /tmp
, я вижу:
$ ls -l /tmp
total 1199684
-rw------- 1 john john 20000000000 Dec 1 15:56 magick-9559WtN2jwPlvrMm
Временный файл 20 ГБ.Это 50000 * 50000 * 4 * 2, поэтому он создает 16-разрядное четырехканальное временное изображение.* * * * * * * * * * * * * * * * * * * * * * * *
Вы можете рассмотреть другие системы - * 101 8 * libvips - библиотека обработки потоковых изображений, поэтому она может выполнять команды.как это без необходимости делать полные промежуточные изображения.Я вижу:
$ time vips replicate k2.jpg result.jpg 35 25
real 0m13.592s
user 0m16.383s
sys 0m1.426s
$ vipsheader result.jpg
result.jpg: 50750x51200 uchar, 3 bands, srgb, jpegload
Это копирует k2.jpg
35 раз по горизонтали и 25 раз по вертикали, чтобы сделать изображение немного больше, чем 50k x 50k.Он не создает временный файл и заканчивается примерно через 15 секунд.У него не будет проблем с выходом очень, очень больших выходных изображений - я регулярно обрабатываю изображения размером 300 000 x 300 000 пикселей (хотя, очевидно, не в формате jpg).