Получите ограничение более 2 ГБ при создании PDF-файлов с помощью ImageMagick

В системах GNU cat, обратный cat, равен tac:

$ tac -s" " <<< "$VAR "            # Please note the added final space.
100 90 80 70 60 50 40 30 20 10
19
11.02.2018, 23:43
3 ответа

Попробуйте ограничить кеш пикселей, используемый convert, например, до 1 ГиБ:

convert 0001.miff ... 2000.miff -limit memory 1GiB -limit map 1GiB -compress jpeg -quality 80 out.pdf

Надеюсь, это заставит ImageMagic регулярно выгружать уже обработанные данные на диск вместо того, чтобы пытаться уместить более 2 ГиБ в буферах ОЗУ.

Кстати, объем виртуальной памяти, доступной одному процессу в 32-разрядной версии Linux, определяется настройкой VMSPLITконфигурации ядра. Это может быть 2G/2G (2 ГБ для ядра + 2 ГБ для пользователя) или 1G/3G (1 ГБ для ядра + 3 ГБ для пользователя). В работающей системе этот параметр можно найти через

zcat /proc/config.gz | grep VMSPLIT

. В некоторых системах конфигурация ядра вместо этого хранится в /boot/config-$(uname -r).

12
27.01.2020, 19:45

Ваше ограничение действительно связано не с файловой системой; или из версий пакетов я думаю .

Ограничение в 2 ГБ связано с тем, что вы используете 32-разрядную -версию ОС.

Вариантом увеличения файла будет установка 64-битной -версии , если аппаратное обеспечение поддерживает ее .

См. Поддержка больших файлов

Traditionally, many operating systems and their underlying file system implementations used 32-bit integers to represent file sizes and positions. Consequently, no file could be larger than 232 − 1 bytes (4 GB − 1). In many implementations, the problem was exacerbated by treating the sizes as signed numbers, which further lowered the limit to 231 − 1 bytes (2 GB − 1).

24
27.01.2020, 19:45

Если бы не огромное количество фотографий, вы могли бы использовать TeX/LaTeX для создания PDF. Тогда вы все еще можете получить тот же результат (pdf изображений )без проблемы сбоя конвертера. Ограничения файлов в TeX должны быть только вашей системой (аппаратное обеспечение + ОС)

Но я думаю, вы могли бы использовать сценарий оболочки для написания TeX:

0)

mkdir convert
pushd convert
PATH=convert:$PATH /* keep everything in one directory for tidyness.*/

1 )сделать шаблон

1.1 )Я уверен, что есть способ выполнить этот шаг за один раз, заменив имя изображения переменной и вставив, а не добавляя, и отформатировав $FOO, чтобы иметь правильные начальные 0, но следующее это только то, что я знаю.

1.2 )Шаблон необходимо разделить, чтобы сценарий мог вставить имя файла

1.3 )nano tmplt1 / *или редактор по вашему выбору */

/* white space line */ 
\begin{figure}[h!]
    \includegraphics[width=0.5\linewidth]{
/* at this point the script will insert $FOO, the file name variable */

1.3.1 )Однако ваши файлы идут 0001.miff … 0010.miff … 0100.miff … 2000.miff. Т.е. переменное количество ведущих нулей. Обходной путь :4 версии tmplt1 :tmplt1 -9, tmplt10 -99, tmplt100 -999, tmplt1000 -2000. Tmplt1 -9 концов «...width]{000» (т.е. добавить 3 0 ); tmplt10 -99 заканчивается "...width]{00" (т.е. добавить 2 0 ).100 -999 добавляет 1 ноль, а 1000 -2000 совпадает с tmplt1

1.4 )следующая часть шаблона :nano tmplt2 / *OEOYC */

.miff}
   \caption{ /* if you want to caption, otherwise skip to  tmplt3.
Same again, script will insert $FOO here */

1.5 )следующая часть шаблона :nano tmplt3 / *OEOYC */

}
\label{f:   /*if you want them labelled which is actually
a index/reference for the text to refer to, not a caption.
Same again, the script will insert $FOO here. If you do not
want labels, skip to tmplt4*/

1.6 )следующий шаблон :nano tmplt4 / *OEOYC */

    }
\end{figure}

2 )сделать начало файла :nano head / *OEOYC */

\documentclass{article} /* Or more suitable class */
 \usepackage{graphicx}
 \begin{document}
  /* white space line*/

3 )конец файла :нанофут / *OEOYC */

\end {document} 

4 )сделать скрипт :nano loader / *OEOYC */

#! /bin/bash

cat head > out.pdf

for FOO in {1...9}
do
    cat tmplt1-9 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt2 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt3 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt4 >> out.pdf
done

for FOO in {10...99}
do
    cat tmplt10-99 >> out.pdf /* this looks like a lot but
is actually copy-paste of first block, just add relevant 0's and 9's */
    echo "$FOO" | cat >> out.pdf
    cat tmplt2 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt3 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt4 >> out.pdf
done

for FOO in {100...999}
do
    cat tmplt100-999 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt2 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt3 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt4 >> out.pdf
done

for FOO in {1000...2000}
do
    cat tmplt1000-2000 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt2 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt3 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt4 >> out.pdf
done

cat foot >> out.pdf

5 )сделать скрипт исполняемым :chmod u+x loader

5.1 )После тестирования я обнаружил, что каждый раз, когда вставляется $FOO, он распределяется на 3 строки. Я не знаю никакого обходного пути, кроме входа в сценарий и ручного удаления возврата каретки. По крайней мере, на все 2000 фото всего 36

6 )скрипт вызова :загрузчик

7 )скомпилировать TeX :pdflatex out.pdf

1
27.01.2020, 19:45

Теги

Похожие вопросы