Ringkasan MVG • Primitif grafis
Spesifikasi ini mendefinisikan fitur dan sintaksis Magick Vector Graphics (MVG), bahasa modular untuk mendeskripsikan grafik vektor dua dimensi maupun grafik campuran vektor/raster di ImageMagick. Anda dapat menggunakan bahasa ini untuk menggambar dari baris perintah, dari file MVG, dari file SVG -- Scalable Vector Graphics, atau dari salah satu antarmuka program ImageMagick. Gunakan perintah berikut, misalnya, untuk merender busur:
magick -size 100x60 canvas:skyblue -fill white -stroke black \
-draw "path 'M 30,40 A 30,20 20 0,0 70,20 A 30,20 20 1,0 30,40 Z '" \
arc.png
dan berikut hasilnya:
Ketika gambar menjadi cukup rumit, kami menyarankan Anda menyusun primitif grafis ke dalam file MVG. Untuk contoh ini, kita menggunakan piechart.mvg:
push graphic-context
viewbox 0 0 624 369
affine 0.283636 0 0 0.283846 -0 -0
push graphic-context
push graphic-context
fill 'darkslateblue'
stroke 'blue'
stroke-width 1
rectangle 1,1 2199,1299
pop graphic-context
push graphic-context
font-size 40
fill 'white'
stroke-width 1
text 600,1100 'Average: 20.0'
pop graphic-context
push graphic-context
fill 'red'
stroke 'black'
stroke-width 5
path 'M700.0,600.0 L340.0,600.0 A360.0,360.0 0 0,1 408.1452123287954,389.2376150414973 z'
pop graphic-context
push graphic-context
font-size 40
fill 'white'
stroke-width 1
text 1400,140 'MagickWand for PHP'
pop graphic-context
push graphic-context
font-size 30
fill 'white'
stroke-width 1
text 1800,140 '(10.0%)'
pop graphic-context
push graphic-context
fill 'red'
stroke 'black'
stroke-width 4
rectangle 1330,100 1370,140
pop graphic-context
push graphic-context
fill 'yellow'
stroke 'black'
stroke-width 5
path 'M700.0,600.0 L408.1452123287954,389.2376150414973 A360.0,360.0 0 0,1 976.5894480359858,369.56936567559273 z'
pop graphic-context
push graphic-context
font-size 40
fill 'white'
stroke-width 1
text 1400,220 'MagickCore'
pop graphic-context
push graphic-context
font-size 30
fill 'white'
stroke-width 1
text 1800,220 '(29.0%)'
pop graphic-context
push graphic-context
fill 'yellow'
stroke 'black'
stroke-width 4
rectangle 1330,180 1370,220
pop graphic-context
push graphic-context
fill 'fuchsia'
stroke 'black'
stroke-width 5
path 'M700.0,600.0 L976.5894480359858,369.56936567559273 A360.0,360.0 0 0,1 964.2680466142854,844.4634932636567 z'
pop graphic-context
push graphic-context
font-size 40
fill 'white'
stroke-width 1
text 1400,300 'MagickWand'
pop graphic-context
push graphic-context
font-size 30
fill 'white'
stroke-width 1
text 1800,300 '(22.9%)'
pop graphic-context
push graphic-context
fill 'fuchsia'
stroke 'black'
stroke-width 4
rectangle 1330,260 1370,300
pop graphic-context
push graphic-context
fill 'blue'
stroke 'black'
stroke-width 5
path 'M700.0,600.0 L964.2680466142854,844.4634932636567 A360.0,360.0 0 0,1 757.853099990584,955.3210081341651 z'
pop graphic-context
push graphic-context
font-size 40
fill 'white'
stroke-width 1
text 1400,380 'JMagick'
pop graphic-context
push graphic-context
font-size 30
fill 'white'
stroke-width 1
text 1800,380 '(10.6%)'
pop graphic-context
push graphic-context
fill 'blue'
stroke 'black'
stroke-width 4
rectangle 1330,340 1370,380
pop graphic-context
push graphic-context
fill 'lime'
stroke 'black'
stroke-width 5
path 'M700.0,600.0 L757.853099990584,955.3210081341651 A360.0,360.0 0 0,1 340.0,600.0 z'
pop graphic-context
push graphic-context
font-size 40
fill 'white'
stroke-width 1
text 1400,460 'Magick++'
pop graphic-context
push graphic-context
font-size 30
fill 'white'
stroke-width 1
text 1800,460 '(27.5%)'
pop graphic-context
push graphic-context
fill 'lime'
stroke 'black'
stroke-width 4
rectangle 1330,420 1370,460
pop graphic-context
push graphic-context
font-size 100
fill 'white'
stroke-width 1
text 100,150 'ImageMagick'
pop graphic-context
push graphic-context
fill 'none'
stroke 'black'
stroke-width 5
circle 700,600 700,960
pop graphic-context
pop graphic-context
pop graphic-context
untuk merender diagram lingkaran dengan perintah berikut:
magick mvg:piechart.mvg piechart.png
yang menghasilkan rendering berikut:
Namun demikian, secara umum MVG cukup sulit untuk dikerjakan langsung sehingga Anda mungkin lebih memilih menggunakan program untuk menghasilkan grafik dalam format SVG. ImageMagick secara otomatis mengonversi SVG ke MVG lalu merender gambar Anda; sebagai contoh, kita merender piechart.svg dengan perintah berikut:
magick mvg:piechart.svg piechart.jpg
untuk menghasilkan diagram lingkaran yang sama seperti yang kita buat dengan bahasa MVG.
Penggambaran juga tersedia dari banyak antarmuka program ImageMagick. ImageMagick mengonversi panggilan API penggambaran ke MVG lalu merendernya. Berikut contoh kode yang ditulis dalam bahasa MagickWand:
(void) PushDrawingWand(draw_wand);
{
const PointInfo points[6] =
{
{ 180,504 },
{ 282.7,578.6 },
{ 243.5,699.4 },
{ 116.5,699.4 },
{ 77.26,578.6 },
{ 180,504 }
};
DrawSetStrokeAntialias(draw_wand,True);
DrawSetStrokeWidth(draw_wand,9);
DrawSetStrokeLineCap(draw_wand,RoundCap);
DrawSetStrokeLineJoin(draw_wand,RoundJoin);
(void) DrawSetStrokeDashArray(draw_wand,0,(const double *)NULL);
(void) PixelSetColor(color,"#4000c2");
DrawSetStrokeColor(draw_wand,color);
DrawSetFillRule(draw_wand,EvenOddRule);
(void) PixelSetColor(color,"#800000");
DrawSetFillColor(draw_wand,color);
DrawPolygon(draw_wand,6,points);
}
(void) PopDrawingWand(draw_wand);
Ringkasan MVG
MVG mengabaikan semua whitespace di antara perintah. Hal ini memungkinkan beberapa perintah MVG ditulis dalam satu baris. Sudah menjadi konvensi umum untuk mengakhiri setiap perintah MVG dengan baris baru agar MVG lebih mudah diedit dan dibaca. Deskripsi sintaksis ini menggunakan indentasi pada urutan MVG untuk membantu pemahaman. Indentasi didukung, tetapi tidak wajib.
Sintaksis wrapper metafile (untuk mendukung file MVG mandiri):
push graphic-context
viewbox 0 0 width height
[ any other MVG commands ]
pop graphic-context
Sintaksis pola (menyimpan dan memulihkan konteks):
push pattern id x,y width,height
push graphic-context
[ drawing commands ]
pop graphic-context
pop pattern
berikut contohnya (%s adalah string identifier):
push defs
push pattern %s 10,10 20,20
push graphic-context
fill red
rectangle 5,5 15,15
pop graphic-context
push graphic-context
fill green
rectangle 10,10 20,20
pop graphic-context
pop pattern
pop defs
Untuk pengubinan (tiling) gambar, gunakan:
push pattern id x,y width,height
image Copy ...
pop pattern
Perhatikan bahwa Anda dapat menggunakan pola tersebut baik untuk fill maupun stroke, seperti:
stroke url(#%s)
atau
fill url(#%s)
Clip path mendefinisikan area clip, dan hanya bagian di dalamnya yang akan digambar. Area di luar area clip akan disembunyikan (masked).
push defs
push clip-path "myClipPath"
push graphic-context
rectangle 10,10 20,20
pop graphic-context
pop clip-path
pop defs
clip-path url(#myClipPath)
Primitif grafis
Berikut deskripsi lengkap primitif grafis MVG:
affine sx,rx,ry,sy,tx,ty
arc x0,y0 x1,y1 a0,a1
bezier x0,y0 ... xn,yn
Bezier (spline) membutuhkan tiga atau lebih koordinat x,y untuk mendefinisikan bentuknya. Titik pertama dan terakhir adalah knot (koordinat yang dipertahankan), dan koordinat perantara mana pun adalah titik kontrol. Jika dua titik kontrol ditentukan, garis antara setiap knot ujung dan titik kontrol yang berpasangan dengannya secara berurutan menentukan arah garis singgung kurva pada ujung tersebut. Jika satu titik kontrol ditentukan, garis dari knot ujung ke satu titik kontrol tersebut menentukan arah garis singgung kurva pada masing-masing ujung. Jika lebih dari dua titik kontrol ditentukan, titik kontrol tambahan bekerja secara kombinasi untuk menentukan bentuk perantara kurva. Untuk menggambar kurva kompleks, sangat disarankan untuk menggunakan primitif Path, atau menggambar beberapa segmen bezier empat titik dengan knot awal dan akhir dari setiap segmen berurutan diulang.
border-color color
circle originx,originy perimeterx,perimetery
clip-path url(name)
clip-rule rule
Pilih dari jenis aturan berikut:
evenodd
nonzero
clip-units units
Pilih dari jenis satuan berikut:
userSpace
userSpaceOnUse
objectBoundingBox
color x,y method
Pilih dari jenis metode berikut:
point
replace
floodfill
filltoborder
reset
compliance type
Pilih dari jenis compliance berikut: MVG atau SVG
decorate type
Pilih dari jenis dekorasi berikut:
none
line-through
overline
underline
ellipse centerx,centery radiusx,radiusy arcstart,arcstop
fill color
Pilih salah satu dari warna berikut ini.
fill-opacity opacity
Opacity berkisar dari 0.0 (sepenuhnya transparan) hingga 1.0 (sepenuhnya opak), atau dalam persentase (misalnya 50%).
fill-rule rule
Pilih dari jenis aturan berikut:
evenodd
nonzero
font name
font-family family
font-size point-size
font-stretch type
Pilih dari jenis stretch berikut:
all
normal
ultra-condensed
extra-condensed
condensed
semi-condensed
semi-expanded
expanded
extra-expanded
ultra-expanded
font-style style
Pilih dari gaya berikut:
all
normal
italic
oblique
font-weight weight
Pilih dari bobot berikut:
all
normal
bold
100
200
300
400
500
600
700
800
900
gradient-units units
Pilih dari satuan berikut:
userSpace
userSpaceOnUse
objectBoundingBox
gravity type
Pilih dari jenis gravity berikut:
NorthWest
North
NorthEast
West
Center
East
SouthWest
South
SouthEast
image compose x,y width,height 'filename'
Pilih dari operasi compose berikut:
| Metode | Deskripsi |
|---|---|
| clear | Baik warna maupun alpha tujuan dikosongkan. Baik sumber maupun tujuan tidak digunakan sebagai input. |
| src | Sumber disalin ke tujuan. Tujuan tidak digunakan sebagai input. |
| dst | Tujuan dibiarkan tidak berubah. |
| src-over | Sumber dikomposisikan di atas tujuan. |
| dst-over | Tujuan dikomposisikan di atas sumber, dan hasilnya menggantikan tujuan. |
| src-in | Bagian sumber yang berada di dalam tujuan menggantikan tujuan. |
| dst-in | Bagian tujuan yang berada di dalam sumber menggantikan tujuan. |
| src-out | Bagian sumber yang berada di luar tujuan menggantikan tujuan. |
| dst-out | Bagian tujuan yang berada di luar sumber menggantikan tujuan. |
| src-atop | Bagian sumber yang berada di dalam tujuan dikomposisikan ke atas tujuan. |
| dst-atop | Bagian tujuan yang berada di dalam sumber dikomposisikan di atas sumber dan menggantikan tujuan. |
| multiply | Sumber dikalikan dengan tujuan dan menggantikan tujuan. Warna hasilnya selalu setidaknya sama gelap dengan salah satu dari kedua warna penyusunnya. Mengalikan warna apa pun dengan hitam menghasilkan hitam. Mengalikan warna apa pun dengan putih membiarkan warna aslinya tidak berubah. |
| screen | Sumber dan tujuan dikomplemenkan, lalu dikalikan, kemudian menggantikan tujuan. Warna hasilnya selalu setidaknya sama terang dengan salah satu dari kedua warna penyusunnya. Menerapkan screen pada warna apa pun dengan putih menghasilkan putih. Menerapkan screen pada warna apa pun dengan hitam membiarkan warna aslinya tidak berubah. |
| overlay | Mengalikan atau menerapkan screen pada warna, tergantung pada warna tujuan. Warna sumber melapisi (overlay) tujuan sambil mempertahankan area terang (highlight) dan bayangannya (shadow). Warna tujuan tidak digantikan, tetapi dicampur dengan warna sumber untuk merefleksikan terang atau gelapnya tujuan. |
| darken | Memilih warna yang lebih gelap di antara tujuan dan sumber. Tujuan digantikan oleh sumber ketika sumber lebih gelap; jika tidak, tujuan dibiarkan tidak berubah. |
| lighten | Memilih warna yang lebih terang di antara tujuan dan sumber. Tujuan digantikan oleh sumber ketika sumber lebih terang; jika tidak, tujuan dibiarkan tidak berubah. |
| linear-light | Meningkatkan kontras sedikit dengan memengaruhi nilai tonal latar depan. |
| color-dodge | Mencerahkan warna tujuan untuk merefleksikan warna sumber. Melukis dengan hitam tidak menghasilkan perubahan. |
| color-burn | Menggelapkan warna tujuan untuk merefleksikan warna sumber. Melukis dengan putih tidak menghasilkan perubahan. |
| hard-light | Mengalikan atau menerapkan screen pada warna, tergantung pada nilai warna sumber. Jika warna sumber lebih terang daripada 0.5, tujuan dicerahkan seolah-olah di-screen. Jika warna sumber lebih gelap daripada 0.5, tujuan digelapkan, seolah-olah dikalikan. Tingkat pencerahan atau penggelapan sebanding dengan selisih antara warna sumber dan 0.5. Jika sama dengan 0.5, tujuan tidak berubah. Melukis dengan hitam atau putih murni menghasilkan hitam atau putih. |
| soft-light | Menggelapkan atau mencerahkan warna, tergantung pada nilai warna sumber. Jika warna sumber lebih terang daripada 0.5, tujuan dicerahkan. Jika warna sumber lebih gelap daripada 0.5, tujuan digelapkan, seolah-olah dibakar (burned in). Tingkat penggelapan atau pencerahan sebanding dengan selisih antara warna sumber dan 0.5. Jika sama dengan 0.5, tujuan tidak berubah. Melukis dengan hitam atau putih murni menghasilkan area yang jelas lebih gelap atau lebih terang, tetapi tidak menghasilkan hitam atau putih murni. |
| plus | Sumber ditambahkan ke tujuan dan menggantikan tujuan. Operator ini berguna untuk menganimasikan dissolve di antara dua gambar. |
| add | Sama seperti 'plus', tetapi data transparansi diperlakukan sebagai nilai matte. Dengan demikian, area transparan mana pun pada salah satu gambar tetap transparan. |
| minus | Mengurangkan warna pada gambar sumber dari gambar tujuan. Jika transparansi terlibat, area opak akan dikurangkan dari area opak tujuan mana pun. |
| subtract | Mengurangkan warna pada gambar sumber dari gambar tujuan. Jika transparansi terlibat, area transparan dikurangkan, sehingga hanya area opak pada sumber yang tetap opak pada gambar tujuan. |
| difference | Warna yang lebih gelap di antara kedua warna penyusun dikurangkan dari warna yang lebih terang. Melukis dengan putih membalikkan warna tujuan. Melukis dengan hitam tidak menghasilkan perubahan. |
| exclusion | Menghasilkan efek serupa dengan 'difference', tetapi tampak dengan kontras yang lebih rendah. Melukis dengan putih membalikkan warna tujuan. Melukis dengan hitam tidak menghasilkan perubahan. |
| xor | Bagian sumber yang berada di luar tujuan digabungkan dengan bagian tujuan yang berada di luar sumber. |
| copy-* | Menyalin kanal yang ditentukan pada gambar sumber ke kanal yang sama pada gambar tujuan. Jika kanal yang ditentukan tidak ada pada gambar sumber (yang hanya dapat terjadi untuk metode 'copy-opacity' atau 'copy-black'), gambar sumber dianggap sebagai gambar kanal skala abu-abu khusus berisi nilai yang akan disalin. |
| change-mask | Mengganti piksel tujuan mana pun yang mirip dengan piksel gambar sumber (sebagaimana didefinisikan oleh faktor -fuzz saat ini), dengan transparansi. |
interline-spacing pixels
interword-spacing pixels
kerning pixels
line x,y x1,y1
matte x,y method
Pilih dari metode berikut:
point
replace
floodfill
filltoborder
reset
offset offset
opacity opacity
Gunakan persentase (misalnya 50%).
path path
point x,y
polygon x,y x1,y1, ..., xn,yn
polyline x,y x1,y1, ..., xn,yn
pop clip-path
pop defs
pop gradient
pop graphic-context
pop pattern
push clip-path "name"
push defs
push gradient id linear x,y x1,y1
push gradient id radial xc,cy xf,yf radius
push graphic-context { "id" }
id bersifat opsional
push pattern id x,y width,height
rectangle x,y x1,y1
rotate angle
roundrectangle x,y x1,y1 width,height
scale x,y
skewX angle
skewX angle
stop-color color offset
stroke color
stroke-antialias 0 • 1
stroke-dasharray none • numeric-list
stroke-dashoffset offset
stroke-linecap type
Pilih dari jenis cap berikut:
butt
round
square
stroke-linejoin type
Pilih dari jenis join berikut:
bevel
miter
round
stroke-miterlimit limit
stroke-opacity opacity
Opacity berkisar dari 0.0 (sepenuhnya transparan) hingga 1.0 (sepenuhnya opak), atau dalam persentase (misalnya 50%).
stroke-width width
text "text"
text-antialias 0 • 1
text-undercolor color
translate x,y
use "url(#id)"
viewbox x,y x1,y1
Perhatikan bahwa primitif bersifat case-sensitive; misalnya, gunakan viewbox, bukan viewBox.

