Размещение текста Imagemagick на изображениях с различными размерами

Конструкция << EOF... EOFназывается здесь -документом, и вы можете поместить любую строку в качестве разделителя, но обычно используется EOF.

Проблема, с которой вы столкнулись, заключается в том, что здесь -документ действует как строка в двойных -кавычках, поэтому переменные и подстановка команд в нем расширяются при запуске cat, они не сохраняются, как -в результирующем файле. Это, вероятно, не то, что вы хотите, так как вы установили, например. R_funcв batch_x.sh, которое вы пишете, но ${R_func}расширится до любого значения R_funcв генерирующем скрипте.

Вы можете предотвратить это, заключив в кавычки разделитель документа здесь -, т. е. вместо этого используйте cat << 'EOF'. Однако это предотвращает расширение всех переменных, поэтому вы не можете расширить одну и другие, не создавая файл по частям или используя разделитель без кавычек и экранируя все переменные, кроме одной, как в Ответ дяди Билли .


Теперь, если я правильно понял вашу мысль,вы хотите создать 26 скриптов, в одном из которых каждая буква жестко -закодирована. Первый сценарий, который вы создаете (batch_A.sh), выглядит примерно так:

module load R/3.5.1
R_func="/home/dir/R_func"
....
for AF in ${BASE}/A*.txt_step3; do
   Rscript ${R_func}P_tools.R \
  ...
done

Вместо этого вы можете создать только один сценарий, как показано ниже, и передать ему букву в качестве аргумента командной строки. Первый аргумент командной строки доступен как"$1":

#!/bin/bash
module load R/3.5.1
R_func="/home/dir/R_func"
TREAT="/home/dir/POP"
BASE="/home/dir/base"
OUTPUT="/home/dir/tmp"
letter=$1

for AF in ${BASE}/${letter}*.txt_step3; do
    Rscript "${R_func}P_tools.R" \
    --ptool "${R_func}/P_tools_linux" \
    --group "${AF}" \
    --treat "${TREAT}/pop_exclude24dup" \
    --out "${OUTPUT}/OUT_$(basename "${AF%%_txt_step3}")_noregress" \
    --binary-target F;
done

Переменная letterтеперь будет браться из командной строки, поэтому вы можете запускать batch.sh Aдля обработки файлов Aи т. д.

1
12.05.2020, 20:29
1 ответ

Я не эксперт по imagemagick, но мне было проще сначала создать черную часть с помощью caption:, которая сделает перенос текста за вас. Затем добавьте изображение автомобиля (без черной части ). Надеюсь, этого будет достаточно, чтобы вы продвинулись к желаемому решению.

В качестве отправной точки я вручную обрезал изображение до автомобиля, в 3WL51.jpg, размер 1650x1232, и использовал 500x1232 в качестве желаемой дополнительной черной части.

caption="1925 Ford Model A Touring Car

*

Front Engine Rear Wheel Drive"
font=/usr/share/fonts/liberation/LiberationSans-Regular.ttf
file=3WL51.jpg

convert -size 500x1232 -font "$font" \
 -pointsize 80 -background "#0008" -fill white \
 -gravity center  caption:"$caption" \
 "$file" +swap +append out.jpg

car with caption

1
28.04.2021, 23:15

Теги

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