Search code examples
imagemagickimagemagick-convert

How to rotate text with imagemagick?


I have a long image source pic and I want to add text to every subimage, but when add text to the book, I failed, the final image and code:

the final image

convert src.jpg -gravity north -pointsize 53 -fill white    -annotate +0+520   "I love you,don't leave me " -annotate +0+1146   "Do not be a programmer,ok?" -annotate +0+1772   "fuck u!" -annotate +0+3024  "too simple "  -draw 'translate 340,3340  rotate 21 text 0,0 "Javascript Action"'  final.jpg


Can any one help? Thanks


Solution

  • For your example, you should use -annotate for all the text placements and rotations in Imagemagick rather than using -draw for the last one. This will keep your last text from going off the image. Try this:

    convert src.jpg -gravity north -pointsize 53 -fill white -annotate +0+520 "I love you,don't leave me " -annotate +0+1146 "Do not be a programmer,ok?" -annotate +0+1772 "xxxx x" -annotate +0+3024 "too simple " -gravity north -annotate 21x21+0+3340 "Javascript Action" final1.jpg
    


    enter image description here

    See https://imagemagick.org/script/command-line-options.php#annotate

    Please do not use vulgarisms in examples.

    If you want to have text wrap, then you need to use caption: to create a new image with transparent background for each text. Then composite the new text image onto your background image at the desired locations. You can control when it wraps, by the -size Wx argument. Here I use the full width of your image, that is, -size 1000x.

    convert src.jpg \
    -pointsize 53 -background none -fill white -size 1000x \
    \( -gravity center caption:"I love you,don't leave me" \) -gravity north -geometry +0+420 -compose over -composite \
    \( -gravity center caption:"Do not be a programmer,ok?" \) -gravity north -geometry +0+1046 -compose over -composite \
    \( -gravity center caption:"xxxx x" \) -gravity north -geometry +0+1672 -compose over -composite \
    \( -gravity center caption:"too simple" \) -gravity north -geometry +0+2924 -compose over -composite \
    \( -gravity center caption:"Javascript Action" -rotate 21 \) -gravity north -geometry +0+3240 -compose over -composite \
    final2.jpg
    


    enter image description here

    Or to make it wrap earlier than the width of the your image, I set -size 500x

    convert src.jpg \
    -pointsize 53 -background none -fill white -size 500x \
    \( -gravity center caption:"I love you,don't leave me" \) -gravity north -geometry +0+420 -compose over -composite \
    \( -gravity center caption:"Do not be a programmer,ok?" \) -gravity north -geometry +0+1046 -compose over -composite \
    \( -gravity center caption:"xxxx x" \) -gravity north -geometry +0+1672 -compose over -composite \
    \( -gravity center caption:"too simple" \) -gravity north -geometry +0+2924 -compose over -composite \
    \( -gravity center caption:"Javascript Action" -rotate 21 \) -gravity north -geometry +0+3240 -compose over -composite \
    final3.jpg
    


    enter image description here

    See

    https://imagemagick.org/Usage/text/#caption https://imagemagick.org/Usage/layers/#convert

    ADDITION:

    To blur the text, just add -blur after caption:

    convert src.jpg \
    -pointsize 53 -background none -fill white -size 500x \
    \( -gravity center caption:"I love you,don't leave me" -blur 0x3 \) -gravity north -geometry +0+420 -compose over -composite \
    \( -gravity center caption:"Do not be a programmer,ok?" -blur 0x3 \) -gravity north -geometry +0+1046 -compose over -composite \
    \( -gravity center caption:"xxxx x" -blur 0x3 \) -gravity north -geometry +0+1672 -compose over -composite \
    \( -gravity center caption:"too simple" -blur 0x3 \) -gravity north -geometry +0+2924 -compose over -composite \
    \( -gravity center caption:"Javascript Action" -blur 0x3 -rotate 21 \) -gravity north -geometry +0+3240 -compose over -composite \
    final4.jpg
    


    enter image description here