Как сделать произвольный текст на гифках? - PullRequest
0 голосов
/ 18 октября 2018

Я хочу изменить текст на GIF, изменить «ВЫ» на другие слова, но я не знаю, как это сделать.

исходный GIF

1 Ответ

0 голосов
/ 19 октября 2018

Вот некоторый код Unix Bash, использующий Imagemagick, чтобы делать то, что вы хотите.Обратите внимание, что вы не полностью удалили весь старый текст из изображения головы, поэтому около кадра 35 все еще отображается «y».

Ввод:

enter image description here

Я измерил прямоугольную область в верхней части головы, чтобы ограничить место рисования текста.Я исправляю эту область по ширине и высоте текста, который вы хотите нарисовать.Затем я зацикливаюсь на каждом из 45 кадров и вычисляю 30 случайных значений для каждого из размеров точек (между 5 и 18), положения x и y в пределах рамки.Я сохраняю список накопленных значений для использования с функцией -annotate для рисования текста во фрейме.Как только у меня будут нарисованы все кадры со случайными значениями для текста, я создаю окончательную анимацию.

cd
cd desktop/test
text="test"
wd=180
ht=110
xo=100
yo=60
minsize=5
maxsize=18
dims=`convert -pointsize $maxsize label:"$text" -format "%@" info:`
WxH=`echo $dims | cut -d+ -f1`
twidth=`echo $WxH | cut -dx -f1`
theight=`echo $WxH | cut -dx -f2`
ww=$((wd-twidth))
hh=$((ht-theight))
diffsize=$((maxsize-minsize))
numtext=30
for ((j=0; j<45; j++)); do
list=""
jj=`printf "%02d" $j`
echo "$j"
convert head.gif[$j] -background black -flatten tmp$jj.gif
for ((i=0; i<numtext; i++)); do
psize=`convert xc: -format "%[fx:round($minsize+$diffsize*random())]" info:`
xoff=`convert xc: -format "%[fx:round($xo+$ww*random())]" info:`
yoff=`convert xc: -format "%[fx:round($yo+$hh*random())]" info:`
list="$list -pointsize $psize -annotate +${xoff}+${yoff} '$text'"
done
convert tmp$jj.gif -font arial -fill white $list tmp$jj.gif
done
convert -delay 20 tmp*.gif -loop 0 head_test.gif
rm -f tmp*.gif
cd


enter image description here

Если вы хотитеПоверните текст, затем измените аргументы -annotate следующим образом.Здесь я поворачиваюсь на 10 градусов против часовой стрелки, но для аннотации мне нужно использовать эквивалентные положительные повороты, поэтому 350 градусов.

cd
cd desktop/test
text="test"
wd=180
ht=110
xo=100
yo=60
minsize=5
maxsize=18
dims=`convert -pointsize $maxsize label:$text -format "%@" info:`
WxH=`echo $dims | cut -d+ -f1`
twidth=`echo $WxH | cut -dx -f1`
theight=`echo $WxH | cut -dx -f2`
ww=$((wd-twidth))
hh=$((ht-theight))
diffsize=$((maxsize-minsize))
numtext=30
for ((j=0; j<45; j++)); do
list=""
jj=`printf "%02d" $j`
echo "$j"
convert head.gif[$j] -background black -flatten tmp$jj.gif
for ((i=0; i<numtext; i++)); do
psize=`convert xc: -format "%[fx:round($minsize+$diffsize*random())]" info:`
xoff=`convert xc: -format "%[fx:round($xo+$ww*random())]" info:`
yoff=`convert xc: -format "%[fx:round($yo+$hh*random())]" info:`
list="$list -pointsize $psize -annotate 350x350+${xoff}+${yoff} '$text'"
done
convert tmp$jj.gif -font arial -fill white $list tmp$jj.gif
done
convert -delay 20 tmp*.gif -loop 0 head_test.gif
rm -f tmp*.gif
cd


enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...