Sie so etwas tun könnte. Es ist nur die Hälfte eigentliche Code, es zu sein scheint, weil ich es logisch ausgebreitet haben und kommentiert sie in Blöcke, um es einfach zu folgen:
#!/bin/bash
WIDTH=480 # Canvas width
HEIGHT=120 # Canvas height
TL=10 # Tick length
# Draw ticks using a loop across width of ruler
for ((i=0;i<$WIDTH;i+=10)); do
# Decide tick length, doubling length if multiple of 100
r=$TL
[[ $((i%100)) -eq 0 ]] && ((r=2*r))
# Draw ticks along top edge of ruler
echo line $i,0 $i,$r
# Draw ticks along bottom edge of ruler
echo line $i,$HEIGHT $i,$((HEIGHT-r))
done | convert -size ${WIDTH}x${HEIGHT} xc:yellow -draw @- result.png
Die for
Schleife im Skript erzeugt Befehle wie die folgende Zeichnung und in den einzelnen convert
Befehl am Ende vorbei, die wegen der ich nicht über sie von der Standardeingabe liest -draw @-
line 0,0 0,20
line 0,120 0,100
line 10,0 10,10
line 10,120 10,110
line 20,0 20,10
line 20,120 20,110
line 30,0 30,10
line 30,120 30,110
ein ll Tag mit der Positionierung der Nummerierung Etiketten zu experimentieren, aber wenn Sie die folgenden zwei Zeilen in kurz vor den done
am Ende der Datei hinzufügen, erhalten Sie Etiketten:
# Add numbering labels
if [ $((i%100)) -eq 0 ]; then
echo text $i,$((HEIGHT/2)) \"$i\"
fi
Was die Ticks auf den vertikalen Seiten betrifft, gibt es eine Reihe von Möglichkeiten, dies zu tun, die sich zunehmend auf bash
Features verlassen - wie zusammengesetzte Anweisungen und dergleichen. Um es einfach zu halten, würde ich wahrscheinlich das Bild vom ursprünglichen Teil oben nehmen und es neu laden, um die vertikalen Linien zu zeichnen und dann wieder zu speichern. Es würde wie folgt aussehen:
#!/bin/bash
WIDTH=480 # Canvas width
HEIGHT=120 # Canvas height
TL=10 # Tick length
# Draw ticks using a loop across width of ruler
for ((i=0;i<$WIDTH;i+=10)); do
# Decide tick length, doubling length if multiple of 100
r=$TL
[[ $((i%100)) -eq 0 ]] && ((r=2*r))
# Draw ticks along top edge of ruler
echo line $i,0 $i,$r
# Draw ticks along bottom edge of ruler
echo line $i,$HEIGHT $i,$((HEIGHT-r))
# Add numbering labels
if [ $((i%100)) -eq 0 ]; then
echo text $i,$((HEIGHT/2)) \"$i\"
fi
done | convert -size ${WIDTH}x${HEIGHT} xc:yellow -draw @- result.png
### NEW PART FOR VERTICAL EDGES FOLLOWS
# Draw ticks down sides of ruler
for ((i=10;i<$((HEIGHT-10));i+=10)); do
# Decide tick length, doubling length if multiple of 100
r=$TL
[[ $((i%100)) -eq 0 ]] && ((r=2*r))
# Draw ticks along left edge of ruler
echo line 0,$i $r,$i
# Draw ticks along right edge of ruler
echo line $((WIDTH-r)),$i $WIDTH,$i
done | convert result.png -draw @- result.png
Einige weitere Verfeinerungen in dieser Version:
#!/bin/bash
WIDTH=730 # Canvas width
HEIGHT=310 # Canvas height
TL=10 # Tick length
# Draw ticks using a loop across width of ruler
for ((i=0;i<$WIDTH;i+=10)); do
# Decide tick length, doubling length if multiple of 100
r=$TL
[[ $((i%50)) -eq 0 ]] && ((r=3*TL/2))
[[ $((i%100)) -eq 0 ]] && ((r=2*TL))
# Draw ticks along top edge of ruler
echo line $i,0 $i,$r
# Draw ticks along bottom edge of ruler
echo line $i,$HEIGHT $i,$((HEIGHT-r))
# Add numbering labels
if [ $((i%100)) -eq 0 ]; then
echo text $i,$((HEIGHT/8)) \"$i\"
echo text $i,$((7*HEIGHT/8)) \"$i\"
fi
done | convert -size ${WIDTH}x${HEIGHT} xc:yellow -draw @- result.png
# Draw ticks down sides of ruler
for ((i=10;i<$((HEIGHT-10));i+=10)); do
# Decide tick length, doubling length if multiple of 100
r=$TL
[[ $((i%50)) -eq 0 ]] && ((r=3*TL/2))
[[ $((i%100)) -eq 0 ]] && ((r=2*TL))
# Draw ticks along left edge of ruler
echo line 0,$i $r,$i
# Draw ticks along right edge of ruler
echo line $((WIDTH-r)),$i $WIDTH,$i
# Add numbering labels
if [ $((i%100)) -eq 0 ]; then
echo text 40,$i \"$i\"
echo text $((WIDTH-80)),$i \"$i\"
fi
done | convert result.png -draw @- result.png
Ich finde, dass xmgrace (https: // en.wikipedia.org/wiki/Grace_%28plotting_tool%29) ist gut für solche Dinge. Ich würde xmgrace verwenden, um ein Startbild mit den Häkchen zu erstellen und dieses Image in ImageMagick zu importieren. –