1 2 3 4 5<!doctype html> 6<html lang="en"> 7<head> 8 <meta charset="utf-8" /> 9 <meta name="viewport" content="width=device-width, initial-scale=1" /> 10 <title>ImageMagick - MagickWand, C API: Wand View Methods</title> 11 <meta name="application-name" content="ImageMagick" /> 12 <meta name="description" content="Use ImageMagick® to create, edit, compose, and convert digital images. Resize an image, crop it, change its shades and colors, add captions, and more." /> 13 <meta name="application-url" content="https://imagemagick.org" /> 14 <meta name="generator" content="PHP" /> 15 <meta name="keywords" content="magickwc, api:, wview, methods, image processing software" /> 16 <meta name="rating" content="GENERAL" /> 17 <meta name="robots" content="INDEX, FOLLOW" /> 18 <meta name="generator" content="ImageMagick Studio LLC" /> 19 <meta name="author" content="ImageMagick Studio LLC" /> 20 <meta name="revisit-after" content="2 DAYS" /> 21 <meta name="resource-type" content="document" /> 22 <meta name="copyright" content="Copyright (c) 1999-2020 ImageMagick Studio LLC" /> 23 <meta name="distribution" content="Global" /> 24 <meta name="magick-serial" content="P131-S030410-R485315270133-P82224-A6668-G1245-1" /> 25 <meta property='og:url' content='../../' /> 26 <meta property='og:title' content='ImageMagick' /> 27 <meta property='og:image' content='../../../images/logo.png' /> 28 <meta property='og:type' content='website' /> 29 <meta property='og:site_name' content='ImageMagick' /> 30 <meta property='og:description' content="Create, Edit, Compose, or Convert Digital Images" /> 31 <meta name="google-site-verification" content="_bMOCDpkx9ZAzBwb2kF3PRHbfUUdFj2uO8Jd1AXArz4" /> 32 <link href="wand-view.html" rel="canonical" /> 33 <link href="../../../images/wand.png" rel="icon" /> 34 <link href="../../../images/wand.ico" rel="shortcut icon" /> 35 <link href="../../assets/magick.css" rel="stylesheet" /> 36</head> 37<body> 38 <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top"> 39 <div class="container-fluid"> 40 <a class="navbar-brand" href="../../"><img class="d-block" id="icon" alt="ImageMagick" width="32" height="32" src="../../../images/wand.ico"/></a> 41 <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#magick-navbars" aria-controls="magick-navbars" aria-expanded="false" aria-label="Toggle navigation"> 42 <span class="navbar-toggler-icon"></span> 43 </button> 44 45 <div class="collapse navbar-collapse" id="magick-navbars"> 46 <ul class="navbar-nav me-auto mb-2 mb-md-0"> 47 <li class="nav-item"> 48 <a class="nav-link " href="../../www/index.html">Home</a> 49 </li> 50 <li class="nav-item"> 51 <a class="nav-link " href="../../www/download.html">Download</a> 52 </li> 53 <li class="nav-item"> 54 <a class="nav-link " href="../../www/command-line-tools.html">Tools</a> 55 </li> 56 <li class="nav-item"> 57 <a class="nav-link " href="../../www/command-line-processing.html">CLI</a> 58 </li> 59 <li class="nav-item"> 60 <a class="nav-link " href="../../www/develop.html">Develop</a> 61 </li> 62 <li class="nav-item"> 63 <a class="nav-link" target="_blank" href="https://github.com/ImageMagick/ImageMagick/discussions">Community</a> 64 </li> 65 <li class="nav-item"> 66 <iframe src="https://github.com/sponsors/ImageMagick/button" title="Sponsor ImageMagick" height="35" width="107" style="border: 0;"></iframe> 67 </li> 68 </ul> 69 <form class="d-flex form-inline" action="https://imagemagick.org/script/search.php"> 70 <input class="form-control me-2" type="text" name="q" placeholder="Search" aria-label="Search"> 71 <button class="btn btn-outline-success" type="submit" name="sa">Search</button> 72 </form> 73 </div> 74 </div> 75 </nav> 76 77 <div class="container"> 78 <script async="async" src="https://localhost/pagead/js/adsbygoogle.js"></script> 79 <ins class="adsbygoogle" 80 style="display:block" 81 data-ad-client="ca-pub-3129977114552745" 82 data-ad-slot="6345125851" 83 data-full-width-responsive="true" 84 data-ad-format="horizontal"></ins> 85 <script> 86 (adsbygoogle = window.adsbygoogle || []).push({}); 87 </script> 88 89 </div> 90 91 <main class="container"> 92 <div class="magick-template"> 93<div class="magick-header"> 94<p class="text-center"><a href="wand-view.html#CloneWandView">CloneWandView</a> • <a href="wand-view.html#DestroyWandView">DestroyWandView</a> • <a href="wand-view.html#DuplexTransferWandViewIterator">DuplexTransferWandViewIterator</a> • <a href="wand-view.html#GetWandViewException">GetWandViewException</a> • <a href="wand-view.html#GetWandViewExtent">GetWandViewExtent</a> • <a href="wand-view.html#GetWandViewIterator">GetWandViewIterator</a> • <a href="wand-view.html#GetWandViewPixels">GetWandViewPixels</a> • <a href="wand-view.html#GetWandViewWand">GetWandViewWand</a> • <a href="wand-view.html#IsWandView">IsWandView</a> • <a href="wand-view.html#NewWandView">NewWandView</a> • <a href="wand-view.html#NewWandViewExtent">NewWandViewExtent</a> • <a href="wand-view.html#SetWandViewDescription">SetWandViewDescription</a> • <a href="wand-view.html#SetWandViewIterator">SetWandViewIterator</a> • <a href="wand-view.html#TransferWandViewIterator">TransferWandViewIterator</a> • <a href="wand-view.html#UpdateWandViewIterator">UpdateWandViewIterator</a></p> 95 96<h2><a href="../../api/MagickWand/wand-view_8c.html" id="CloneWandView">CloneWandView</a></h2> 97 98<p>CloneWandView() makes a copy of the specified wand view.</p> 99 100<p>The format of the CloneWandView method is:</p> 101 102<pre class="text"> 103WandView *CloneWandView(const WandView *wand_view) 104</pre> 105 106<p>A description of each parameter follows:</p> 107 108<dd> 109</dd> 110 111<dd> </dd> 112<dl class="dl-horizontal"> 113<dt>wand_view</dt> 114<dd>the wand view. </dd> 115 116<dd> </dd> 117</dl> 118<h2><a href="../../api/MagickWand/wand-view_8c.html" id="DestroyWandView">DestroyWandView</a></h2> 119 120<p>DestroyWandView() deallocates memory associated with a wand view.</p> 121 122<p>The format of the DestroyWandView method is:</p> 123 124<pre class="text"> 125WandView *DestroyWandView(WandView *wand_view) 126</pre> 127 128<p>A description of each parameter follows:</p> 129 130<dd> 131</dd> 132 133<dd> </dd> 134<dl class="dl-horizontal"> 135<dt>wand_view</dt> 136<dd>the wand view. </dd> 137 138<dd> </dd> 139</dl> 140<h2><a href="../../api/MagickWand/wand-view_8c.html" id="DuplexTransferWandViewIterator">DuplexTransferWandViewIterator</a></h2> 141 142<p>DuplexTransferWandViewIterator() iterates over three wand views in parallel and calls your transfer method for each scanline of the view. The source and duplex pixel extent is not confined to the image canvas-- that is you can include negative offsets or widths or heights that exceed the image dimension. However, the destination wand view is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.</p> 143 144<p>The callback signature is:</p> 145 146<pre class="text"> 147MagickBooleanType DuplexTransferImageViewMethod(const WandView *source, 148 const WandView *duplex,WandView *destination,const ssize_t y, 149 const int thread_id,void *context) 150</pre> 151 152<p>Use this pragma if the view is not single threaded:</p> 153 154<pre class="text"> 155 #pragma omp critical 156</pre> 157 158<p>to define a section of code in your callback transfer method that must be executed by a single thread at a time.</p> 159 160<p>The format of the DuplexTransferWandViewIterator method is:</p> 161 162<pre class="text"> 163MagickBooleanType DuplexTransferWandViewIterator(WandView *source, 164 WandView *duplex,WandView *destination, 165 DuplexTransferWandViewMethod transfer,void *context) 166</pre> 167 168<p>A description of each parameter follows:</p> 169 170<dd> 171</dd> 172 173<dd> </dd> 174<dl class="dl-horizontal"> 175<dt>source</dt> 176<dd>the source wand view. </dd> 177 178<dd> </dd> 179<dt>duplex</dt> 180<dd>the duplex wand view. </dd> 181 182<dd> </dd> 183<dt>destination</dt> 184<dd>the destination wand view. </dd> 185 186<dd> </dd> 187<dt>transfer</dt> 188<dd>the transfer callback method. </dd> 189 190<dd> </dd> 191<dt>context</dt> 192<dd>the user defined context. </dd> 193 194<dd> </dd> 195</dl> 196<h2><a href="../../api/MagickWand/wand-view_8c.html" id="GetWandViewException">GetWandViewException</a></h2> 197 198<p>GetWandViewException() returns the severity, reason, and description of any error that occurs when utilizing a wand view.</p> 199 200<p>The format of the GetWandViewException method is:</p> 201 202<pre class="text"> 203char *GetWandViewException(const WandView *wand_view, 204 ExceptionType *severity) 205</pre> 206 207<p>A description of each parameter follows:</p> 208 209<dd> 210</dd> 211 212<dd> </dd> 213<dl class="dl-horizontal"> 214<dt>wand_view</dt> 215<dd>the pixel wand_view. </dd> 216 217<dd> </dd> 218<dt>severity</dt> 219<dd>the severity of the error is returned here. </dd> 220 221<dd> </dd> 222</dl> 223<h2><a href="../../api/MagickWand/wand-view_8c.html" id="GetWandViewExtent">GetWandViewExtent</a></h2> 224 225<p>GetWandViewExtent() returns the wand view extent.</p> 226 227<p>The format of the GetWandViewExtent method is:</p> 228 229<pre class="text"> 230RectangleInfo GetWandViewExtent(const WandView *wand_view) 231</pre> 232 233<p>A description of each parameter follows:</p> 234 235<dd> 236</dd> 237 238<dd> </dd> 239<dl class="dl-horizontal"> 240<dt>wand_view</dt> 241<dd>the wand view. </dd> 242 243<dd> </dd> 244</dl> 245<h2><a href="../../api/MagickWand/wand-view_8c.html" id="GetWandViewIterator">GetWandViewIterator</a></h2> 246 247<p>GetWandViewIterator() iterates over the wand view in parallel and calls your get method for each scanline of the view. The pixel extent is not confined to the image canvas-- that is you can include negative offsets or widths or heights that exceed the image dimension. Any updates to the pixels in your callback are ignored.</p> 248 249<p>The callback signature is:</p> 250 251<pre class="text"> 252MagickBooleanType GetImageViewMethod(const WandView *source, 253 const ssize_t y,const int thread_id,void *context) 254</pre> 255 256<p>Use this pragma if the view is not single threaded:</p> 257 258<pre class="text"> 259 #pragma omp critical 260</pre> 261 262<p>to define a section of code in your callback get method that must be executed by a single thread at a time.</p> 263 264<p>The format of the GetWandViewIterator method is:</p> 265 266<pre class="text"> 267MagickBooleanType GetWandViewIterator(WandView *source, 268 GetWandViewMethod get,void *context) 269</pre> 270 271<p>A description of each parameter follows:</p> 272 273<dd> 274</dd> 275 276<dd> </dd> 277<dl class="dl-horizontal"> 278<dt>source</dt> 279<dd>the source wand view. </dd> 280 281<dd> </dd> 282<dt>get</dt> 283<dd>the get callback method. </dd> 284 285<dd> </dd> 286<dt>context</dt> 287<dd>the user defined context. </dd> 288 289<dd> </dd> 290</dl> 291<h2><a href="../../api/MagickWand/wand-view_8c.html" id="GetWandViewPixels">GetWandViewPixels</a></h2> 292 293<p>GetWandViewPixels() returns the wand view pixel_wands.</p> 294 295<p>The format of the GetWandViewPixels method is:</p> 296 297<pre class="text"> 298PixelWand *GetWandViewPixels(const WandView *wand_view) 299</pre> 300 301<p>A description of each parameter follows:</p> 302 303<dd> 304</dd> 305 306<dd> </dd> 307<dl class="dl-horizontal"> 308<dt>wand_view</dt> 309<dd>the wand view. </dd> 310 311<dd> </dd> 312</dl> 313<h2><a href="../../api/MagickWand/wand-view_8c.html" id="GetWandViewWand">GetWandViewWand</a></h2> 314 315<p>GetWandViewWand() returns the magick wand associated with the wand view.</p> 316 317<p>The format of the GetWandViewWand method is:</p> 318 319<pre class="text"> 320MagickWand *GetWandViewWand(const WandView *wand_view) 321</pre> 322 323<p>A description of each parameter follows:</p> 324 325<dd> 326</dd> 327 328<dd> </dd> 329<dl class="dl-horizontal"> 330<dt>wand_view</dt> 331<dd>the wand view. </dd> 332 333<dd> </dd> 334</dl> 335<h2><a href="../../api/MagickWand/wand-view_8c.html" id="IsWandView">IsWandView</a></h2> 336 337<p>IsWandView() returns MagickTrue if the parameter is verified as a wand view object.</p> 338 339<p>The format of the IsWandView method is:</p> 340 341<pre class="text"> 342MagickBooleanType IsWandView(const WandView *wand_view) 343</pre> 344 345<p>A description of each parameter follows:</p> 346 347<dd> 348</dd> 349 350<dd> </dd> 351<dl class="dl-horizontal"> 352<dt>wand_view</dt> 353<dd>the wand view. </dd> 354 355<dd> </dd> 356</dl> 357<h2><a href="../../api/MagickWand/wand-view_8c.html" id="NewWandView">NewWandView</a></h2> 358 359<p>NewWandView() returns a wand view required for all other methods in the Wand View API.</p> 360 361<p>The format of the NewWandView method is:</p> 362 363<pre class="text"> 364WandView *NewWandView(MagickWand *wand) 365</pre> 366 367<p>A description of each parameter follows:</p> 368 369<dd> 370</dd> 371 372<dd> </dd> 373<dl class="dl-horizontal"> 374<dt>wand</dt> 375<dd>the wand. </dd> 376 377<dd> </dd> 378</dl> 379<h2><a href="../../api/MagickWand/wand-view_8c.html" id="NewWandViewExtent">NewWandViewExtent</a></h2> 380 381<p>NewWandViewExtent() returns a wand view required for all other methods in the Wand View API.</p> 382 383<p>The format of the NewWandViewExtent method is:</p> 384 385<pre class="text"> 386WandView *NewWandViewExtent(MagickWand *wand,const ssize_t x, 387 const ssize_t y,const size_t width,const size_t height) 388</pre> 389 390<p>A description of each parameter follows:</p> 391 392<dd> 393</dd> 394 395<dd> </dd> 396<dl class="dl-horizontal"> 397<dt>wand</dt> 398<dd>the magick wand. </dd> 399 400<dd> </dd> 401<dt>x,y,columns,rows</dt> 402<dd> These values define the perimeter of a extent of pixel_wands view. </dd> 403 404<dd> </dd> 405</dl> 406<h2><a href="../../api/MagickWand/wand-view_8c.html" id="SetWandViewDescription">SetWandViewDescription</a></h2> 407 408<p>SetWandViewDescription() associates a description with an image view.</p> 409 410<p>The format of the SetWandViewDescription method is:</p> 411 412<pre class="text"> 413void SetWandViewDescription(WandView *image_view,const char *description) 414</pre> 415 416<p>A description of each parameter follows:</p> 417 418<dd> 419</dd> 420 421<dd> </dd> 422<dl class="dl-horizontal"> 423<dt>wand_view</dt> 424<dd>the wand view. </dd> 425 426<dd> </dd> 427<dt>description</dt> 428<dd>the wand view description. </dd> 429 430<dd> </dd> 431</dl> 432<h2><a href="../../api/MagickWand/wand-view_8c.html" id="SetWandViewIterator">SetWandViewIterator</a></h2> 433 434<p>SetWandViewIterator() iterates over the wand view in parallel and calls your set method for each scanline of the view. The pixel extent is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension. The pixels are initiallly undefined and any settings you make in the callback method are automagically synced back to your image.</p> 435 436<p>The callback signature is:</p> 437 438<pre class="text"> 439MagickBooleanType SetImageViewMethod(ImageView *destination, 440 const ssize_t y,const int thread_id,void *context) 441</pre> 442 443<p>Use this pragma if the view is not single threaded:</p> 444 445<pre class="text"> 446 #pragma omp critical 447</pre> 448 449<p>to define a section of code in your callback set method that must be executed by a single thread at a time.</p> 450 451<p>The format of the SetWandViewIterator method is:</p> 452 453<pre class="text"> 454MagickBooleanType SetWandViewIterator(WandView *destination, 455 SetWandViewMethod set,void *context) 456</pre> 457 458<p>A description of each parameter follows:</p> 459 460<dd> 461</dd> 462 463<dd> </dd> 464<dl class="dl-horizontal"> 465<dt>destination</dt> 466<dd>the wand view. </dd> 467 468<dd> </dd> 469<dt>set</dt> 470<dd>the set callback method. </dd> 471 472<dd> </dd> 473<dt>context</dt> 474<dd>the user defined context. </dd> 475 476<dd> </dd> 477</dl> 478<h2><a href="../../api/MagickWand/wand-view_8c.html" id="TransferWandViewIterator">TransferWandViewIterator</a></h2> 479 480<p>TransferWandViewIterator() iterates over two wand views in parallel and calls your transfer method for each scanline of the view. The source pixel extent is not confined to the image canvas-- that is you can include negative offsets or widths or heights that exceed the image dimension. However, the destination wand view is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.</p> 481 482<p>The callback signature is:</p> 483 484<pre class="text"> 485MagickBooleanType TransferImageViewMethod(const WandView *source, 486 WandView *destination,const ssize_t y,const int thread_id, 487 void *context) 488</pre> 489 490<p>Use this pragma if the view is not single threaded:</p> 491 492<pre class="text"> 493 #pragma omp critical 494</pre> 495 496<p>to define a section of code in your callback transfer method that must be executed by a single thread at a time.</p> 497 498<p>The format of the TransferWandViewIterator method is:</p> 499 500<pre class="text"> 501MagickBooleanType TransferWandViewIterator(WandView *source, 502 WandView *destination,TransferWandViewMethod transfer,void *context) 503</pre> 504 505<p>A description of each parameter follows:</p> 506 507<dd> 508</dd> 509 510<dd> </dd> 511<dl class="dl-horizontal"> 512<dt>source</dt> 513<dd>the source wand view. </dd> 514 515<dd> </dd> 516<dt>destination</dt> 517<dd>the destination wand view. </dd> 518 519<dd> </dd> 520<dt>transfer</dt> 521<dd>the transfer callback method. </dd> 522 523<dd> </dd> 524<dt>context</dt> 525<dd>the user defined context. </dd> 526 527<dd> </dd> 528</dl> 529<h2><a href="../../api/MagickWand/wand-view_8c.html" id="UpdateWandViewIterator">UpdateWandViewIterator</a></h2> 530 531<p>UpdateWandViewIterator() iterates over the wand view in parallel and calls your update method for each scanline of the view. The pixel extent is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted. Updates to pixels in your callback are automagically synced back to the image.</p> 532 533<p>The callback signature is:</p> 534 535<pre class="text"> 536MagickBooleanType UpdateImageViewMethod(WandView *source,const ssize_t y, 537 const int thread_id,void *context) 538</pre> 539 540<p>Use this pragma if the view is not single threaded:</p> 541 542<pre class="text"> 543 #pragma omp critical 544</pre> 545 546<p>to define a section of code in your callback update method that must be executed by a single thread at a time.</p> 547 548<p>The format of the UpdateWandViewIterator method is:</p> 549 550<pre class="text"> 551MagickBooleanType UpdateWandViewIterator(WandView *source, 552 UpdateWandViewMethod update,void *context) 553</pre> 554 555<p>A description of each parameter follows:</p> 556 557<dd> 558</dd> 559 560<dd> </dd> 561<dl class="dl-horizontal"> 562<dt>source</dt> 563<dd>the source wand view. </dd> 564 565<dd> </dd> 566<dt>update</dt> 567<dd>the update callback method. </dd> 568 569<dd> </dd> 570<dt>context</dt> 571<dd>the user defined context. </dd> 572 573<dd> </dd> 574</dl> 575</div> 576 </div> 577 </main><!-- /.container --> 578 <footer class="magick-footer"> 579 <div class="container-fluid"> 580 <a href="../../www/security-policy.html">Security</a> • 581 <a href="../../www/news.html">News</a> 582 583 <a href="wand-view.html#"><img class="d-inline" id="wand" alt="And Now a Touch of Magick" width="16" height="16" src="../../../images/wand.ico"/></a> 584 585 <a href="../../www/links.html">Related</a> • 586 <a href="../../www/sitemap.html">Sitemap</a> 587 <br/> 588 <a href="../../www/support.html">Sponsor</a> • 589 <a href="../../www/cite.html">Cite</a> • 590 <a href="http://pgp.mit.edu/pks/lookup?op=get&search=0x89AB63D48277377A">Public Key</a> • 591 <a href="../../www/contact.html">Contact Us</a> 592 <br/> 593 <a href="https://github.com/imagemagick/imagemagick" target="_blank" rel="noopener" aria-label="GitHub"><svg xmlns="http://www.w3.org/2000/svg" class="navbar-nav-svg" viewBox="0 0 512 499.36" width="2%" height="2%" role="img" focusable="false"><title>GitHub</title><path fill="currentColor" fill-rule="evenodd" d="M256 0C114.64 0 0 114.61 0 256c0 113.09 73.34 209 175.08 242.9 12.8 2.35 17.47-5.56 17.47-12.34 0-6.08-.22-22.18-.35-43.54-71.2 15.49-86.2-34.34-86.2-34.34-11.64-29.57-28.42-37.45-28.42-37.45-23.27-15.84 1.73-15.55 1.73-15.55 25.69 1.81 39.21 26.38 39.21 26.38 22.84 39.12 59.92 27.82 74.5 21.27 2.33-16.54 8.94-27.82 16.25-34.22-56.84-6.43-116.6-28.43-116.6-126.49 0-27.95 10-50.8 26.35-68.69-2.63-6.48-11.42-32.5 2.51-67.75 0 0 21.49-6.88 70.4 26.24a242.65 242.65 0 0 1 128.18 0c48.87-33.13 70.33-26.24 70.33-26.24 14 35.25 5.18 61.27 2.55 67.75 16.41 17.9 26.31 40.75 26.31 68.69 0 98.35-59.85 120-116.88 126.32 9.19 7.9 17.38 23.53 17.38 47.41 0 34.22-.31 61.83-.31 70.23 0 6.85 4.61 14.81 17.6 12.31C438.72 464.97 512 369.08 512 256.02 512 114.62 397.37 0 256 0z"/></svg></a> • 594 <a href="https://twitter.com/imagemagick" target="_blank" rel="noopener" aria-label="Twitter"><svg xmlns="http://www.w3.org/2000/svg" class="navbar-nav-svg" viewBox="0 0 512 416.32" width="2%" height="2%" role="img" focusable="false"><title>Twitter</title><path fill="currentColor" d="M160.83 416.32c193.2 0 298.92-160.22 298.92-298.92 0-4.51 0-9-.2-13.52A214 214 0 0 0 512 49.38a212.93 212.93 0 0 1-60.44 16.6 105.7 105.7 0 0 0 46.3-58.19 209 209 0 0 1-66.79 25.37 105.09 105.09 0 0 0-181.73 71.91 116.12 116.12 0 0 0 2.66 24c-87.28-4.3-164.73-46.3-216.56-109.82A105.48 105.48 0 0 0 68 159.6a106.27 106.27 0 0 1-47.53-13.11v1.43a105.28 105.28 0 0 0 84.21 103.06 105.67 105.67 0 0 1-47.33 1.84 105.06 105.06 0 0 0 98.14 72.94A210.72 210.72 0 0 1 25 370.84a202.17 202.17 0 0 1-25-1.43 298.85 298.85 0 0 0 160.83 46.92"/></svg></a> 595 <br/> 596 <small>© 1999-2021 ImageMagick Studio LLC</small> 597 </div> 598 </footer> 599 600 <!-- Javascript assets --> 601 <script src="../../assets/magick.js" ></script> 602 </body> 603</html> 604