• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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,minimum-scale=1,initial-scale=1,shrink-to-fit=no"  />
10  <title>ImageMagick - MagickCore, C API: Image View Methods</title>
11  <meta name="application-name" content="ImageMagick" />
12  <meta name="description" content="Use ImageMagick® to create, edit, compose, and convert bitmap 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="magickcore, c, api:, image, view, methods, ImageMagick, PerlMagick, image processing, image, photo, software, Magick++, OpenMP, convert" />
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="Convert, Edit, or Compose Bitmap Images" />
31  <meta name="google-site-verification" content="_bMOCDpkx9ZAzBwb2kF3PRHbfUUdFj2uO8Jd1AXArz4" />
32  <link href="../www/api/image-view.html" rel="canonical" />
33  <link href="../www/images/wand.png" rel="icon" />
34  <link href="../www/images/wand.ico" rel="shortcut icon" />
35  <link href="../www/assets/magick.css" rel="stylesheet" />
36</head>
37<body>
38  <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
39    <a class="navbar-brand" href="../index.html"><img class="d-block" id="icon" alt="ImageMagick" width="32" height="32" src="../www/images/wand.ico"/></a>
40    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsMagick" aria-controls="navbarsMagick" aria-expanded="false" aria-label="Toggle navigation">
41      <span class="navbar-toggler-icon"></span>
42    </button>
43
44    <div class="navbar-collapse collapse" id="navbarsMagick" style="">
45    <ul class="navbar-nav mr-auto">
46      <li class="nav-item ">
47        <a class="nav-link" href="../www/index.html">Home <span class="sr-only">(current)</span></a>
48      </li>
49      <li class="nav-item ">
50        <a class="nav-link" href="../www/www/download.html">Download</a>
51      </li>
52      <li class="nav-item ">
53        <a class="nav-link" href="../www/www/command-line-tools.html">Tools</a>
54      </li>
55      <li class="nav-item ">
56        <a class="nav-link" href="../www/www/command-line-processing.html">Command-line</a>
57      </li>
58      <li class="nav-item ">
59        <a class="nav-link" href="../www/www/resources.html">Resources</a>
60      </li>
61      <li class="nav-item ">
62        <a class="nav-link" href="../www/www/develop.html">Develop</a>
63      </li>
64      <li class="nav-item">
65        <a class="nav-link" target="_blank" href="https://imagemagick.org/discourse-server/">Community</a>
66      </li>
67    </ul>
68    <form class="form-inline my-2 my-lg-0" action="../www/www/search.html">
69      <input class="form-control mr-sm-2" type="text" name="q" placeholder="Search" aria-label="Search">
70      <button class="btn btn-outline-success my-2 my-sm-0" type="submit" name="sa">Search</button>
71    </form>
72    </div>
73  </nav>
74  <div class="container">
75   <script async="async" src="http://localhost/pagead/js/adsbygoogle.js"></script>    <ins class="adsbygoogle"
76         style="display:block"
77         data-ad-client="ca-pub-3129977114552745"
78         data-ad-slot="6345125851"
79         data-full-width-responsive="true"
80         data-ad-format="horizontal"></ins>
81    <script>
82      (adsbygoogle = window.adsbygoogle || []).push({});
83    </script>
84
85  </div>
86
87  <main class="container">
88    <div class="magick-template">
89<div class="magick-header">
90<p class="text-center"><a href="image-view.html#CloneImageView">CloneImageView</a> &#8226; <a href="image-view.html#DestroyImageView">DestroyImageView</a> &#8226; <a href="image-view.html#DuplexTransferImageViewIterator">DuplexTransferImageViewIterator</a> &#8226; <a href="image-view.html#GetImageViewAuthenticMetacontent">GetImageViewAuthenticMetacontent</a> &#8226; <a href="image-view.html#GetImageViewAuthenticPixels">GetImageViewAuthenticPixels</a> &#8226; <a href="image-view.html#GetImageViewException">GetImageViewException</a> &#8226; <a href="image-view.html#GetImageViewExtent">GetImageViewExtent</a> &#8226; <a href="image-view.html#GetImageViewImage">GetImageViewImage</a> &#8226; <a href="image-view.html#GetImageViewIterator">GetImageViewIterator</a> &#8226; <a href="image-view.html#GetImageViewVirtualMetacontent">GetImageViewVirtualMetacontent</a> &#8226; <a href="image-view.html#GetImageViewVirtualPixels">GetImageViewVirtualPixels</a> &#8226; <a href="image-view.html#IsImageView">IsImageView</a> &#8226; <a href="image-view.html#NewImageView">NewImageView</a> &#8226; <a href="image-view.html#NewImageViewRegion">NewImageViewRegion</a> &#8226; <a href="image-view.html#SetImageViewDescription">SetImageViewDescription</a> &#8226; <a href="image-view.html#SetImageViewIterator">SetImageViewIterator</a> &#8226; <a href="image-view.html#TransferImageViewIterator">TransferImageViewIterator</a> &#8226; <a href="image-view.html#UpdateImageViewIterator">UpdateImageViewIterator</a></p>
91
92<h2><a href="../../api/MagickCore/image-view_8c.html" id="CloneImageView">CloneImageView</a></h2>
93
94<p>CloneImageView() makes a copy of the specified image view.</p>
95
96<p>The format of the CloneImageView method is:</p>
97
98<pre class="text">
99ImageView *CloneImageView(const ImageView *image_view)
100</pre>
101
102<p>A description of each parameter follows:</p>
103
104<dd>
105</dd>
106
107<dd> </dd>
108<dl class="dl-horizontal">
109<dt>image_view</dt>
110<dd>the image view. </dd>
111
112<dd>  </dd>
113</dl>
114<h2><a href="../../api/MagickCore/image-view_8c.html" id="DestroyImageView">DestroyImageView</a></h2>
115
116<p>DestroyImageView() deallocates memory associated with a image view.</p>
117
118<p>The format of the DestroyImageView method is:</p>
119
120<pre class="text">
121ImageView *DestroyImageView(ImageView *image_view)
122</pre>
123
124<p>A description of each parameter follows:</p>
125
126<dd>
127</dd>
128
129<dd> </dd>
130<dl class="dl-horizontal">
131<dt>image_view</dt>
132<dd>the image view. </dd>
133
134<dd>  </dd>
135</dl>
136<h2><a href="../../api/MagickCore/image-view_8c.html" id="DuplexTransferImageViewIterator">DuplexTransferImageViewIterator</a></h2>
137
138<p>DuplexTransferImageViewIterator() iterates over three image 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 image view is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.</p>
139
140<p>The callback signature is:</p>
141
142<pre class="text">
143MagickBooleanType DuplexTransferImageViewMethod(const ImageView *source,
144  const ImageView *duplex,ImageView *destination,const ssize_t y,
145  const int thread_id,void *context)
146</pre>
147
148<p>Use this pragma if the view is not single threaded:</p>
149
150<pre class="text">
151    #pragma omp critical
152</pre>
153
154<p>to define a section of code in your callback transfer method that must be executed by a single thread at a time.</p>
155
156<p>The format of the DuplexTransferImageViewIterator method is:</p>
157
158<pre class="text">
159MagickBooleanType DuplexTransferImageViewIterator(ImageView *source,
160  ImageView *duplex,ImageView *destination,
161  DuplexTransferImageViewMethod transfer,void *context)
162</pre>
163
164<p>A description of each parameter follows:</p>
165
166<dd>
167</dd>
168
169<dd> </dd>
170<dl class="dl-horizontal">
171<dt>source</dt>
172<dd>the source image view. </dd>
173
174<dd> </dd>
175<dt>duplex</dt>
176<dd>the duplex image view. </dd>
177
178<dd> </dd>
179<dt>destination</dt>
180<dd>the destination image view. </dd>
181
182<dd> </dd>
183<dt>transfer</dt>
184<dd>the transfer callback method. </dd>
185
186<dd> </dd>
187<dt>context</dt>
188<dd>the user defined context. </dd>
189
190<dd>  </dd>
191</dl>
192<h2><a href="../../api/MagickCore/image-view_8c.html" id="GetImageViewAuthenticMetacontent">GetImageViewAuthenticMetacontent</a></h2>
193
194<p>GetImageViewAuthenticMetacontent() returns the image view authentic meta-content.</p>
195
196<p>The format of the GetImageViewAuthenticPixels method is:</p>
197
198<pre class="text">
199void *GetImageViewAuthenticMetacontent(
200  const ImageView *image_view)
201</pre>
202
203<p>A description of each parameter follows:</p>
204
205<dd>
206</dd>
207
208<dd> </dd>
209<dl class="dl-horizontal">
210<dt>image_view</dt>
211<dd>the image view. </dd>
212
213<dd>  </dd>
214</dl>
215<h2><a href="../../api/MagickCore/image-view_8c.html" id="GetImageViewAuthenticPixels">GetImageViewAuthenticPixels</a></h2>
216
217<p>GetImageViewAuthenticPixels() returns the image view authentic pixels.</p>
218
219<p>The format of the GetImageViewAuthenticPixels method is:</p>
220
221<pre class="text">
222Quantum *GetImageViewAuthenticPixels(const ImageView *image_view)
223</pre>
224
225<p>A description of each parameter follows:</p>
226
227<dd>
228</dd>
229
230<dd> </dd>
231<dl class="dl-horizontal">
232<dt>image_view</dt>
233<dd>the image view. </dd>
234
235<dd>  </dd>
236</dl>
237<h2><a href="../../api/MagickCore/image-view_8c.html" id="GetImageViewException">GetImageViewException</a></h2>
238
239<p>GetImageViewException() returns the severity, reason, and description of any error that occurs when utilizing a image view.</p>
240
241<p>The format of the GetImageViewException method is:</p>
242
243<pre class="text">
244char *GetImageViewException(const PixelImage *image_view,
245  ExceptionType *severity)
246</pre>
247
248<p>A description of each parameter follows:</p>
249
250<dd>
251</dd>
252
253<dd> </dd>
254<dl class="dl-horizontal">
255<dt>image_view</dt>
256<dd>the pixel image_view. </dd>
257
258<dd> </dd>
259<dt>severity</dt>
260<dd>the severity of the error is returned here. </dd>
261
262<dd>  </dd>
263</dl>
264<h2><a href="../../api/MagickCore/image-view_8c.html" id="GetImageViewExtent">GetImageViewExtent</a></h2>
265
266<p>GetImageViewExtent() returns the image view extent.</p>
267
268<p>The format of the GetImageViewExtent method is:</p>
269
270<pre class="text">
271RectangleInfo GetImageViewExtent(const ImageView *image_view)
272</pre>
273
274<p>A description of each parameter follows:</p>
275
276<dd>
277</dd>
278
279<dd> </dd>
280<dl class="dl-horizontal">
281<dt>image_view</dt>
282<dd>the image view. </dd>
283
284<dd>  </dd>
285</dl>
286<h2><a href="../../api/MagickCore/image-view_8c.html" id="GetImageViewImage">GetImageViewImage</a></h2>
287
288<p>GetImageViewImage() returns the image associated with the image view.</p>
289
290<p>The format of the GetImageViewImage method is:</p>
291
292<pre class="text">
293MagickCore *GetImageViewImage(const ImageView *image_view)
294</pre>
295
296<p>A description of each parameter follows:</p>
297
298<dd>
299</dd>
300
301<dd> </dd>
302<dl class="dl-horizontal">
303<dt>image_view</dt>
304<dd>the image view. </dd>
305
306<dd>  </dd>
307</dl>
308<h2><a href="../../api/MagickCore/image-view_8c.html" id="GetImageViewIterator">GetImageViewIterator</a></h2>
309
310<p>GetImageViewIterator() iterates over the image 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>
311
312<p>The callback signature is:</p>
313
314<pre class="text">
315MagickBooleanType GetImageViewMethod(const ImageView *source,
316  const ssize_t y,const int thread_id,void *context)
317</pre>
318
319<p>Use this pragma if the view is not single threaded:</p>
320
321<pre class="text">
322    #pragma omp critical
323</pre>
324
325<p>to define a section of code in your callback get method that must be executed by a single thread at a time.</p>
326
327<p>The format of the GetImageViewIterator method is:</p>
328
329<pre class="text">
330MagickBooleanType GetImageViewIterator(ImageView *source,
331  GetImageViewMethod get,void *context)
332</pre>
333
334<p>A description of each parameter follows:</p>
335
336<dd>
337</dd>
338
339<dd> </dd>
340<dl class="dl-horizontal">
341<dt>source</dt>
342<dd>the source image view. </dd>
343
344<dd> </dd>
345<dt>get</dt>
346<dd>the get callback method. </dd>
347
348<dd> </dd>
349<dt>context</dt>
350<dd>the user defined context. </dd>
351
352<dd>  </dd>
353</dl>
354<h2><a href="../../api/MagickCore/image-view_8c.html" id="GetImageViewVirtualMetacontent">GetImageViewVirtualMetacontent</a></h2>
355
356<p>GetImageViewVirtualMetacontent() returns the image view virtual meta-content.</p>
357
358<p>The format of the GetImageViewVirtualMetacontent method is:</p>
359
360<pre class="text">
361const void *GetImageViewVirtualMetacontent(
362  const ImageView *image_view)
363</pre>
364
365<p>A description of each parameter follows:</p>
366
367<dd>
368</dd>
369
370<dd> </dd>
371<dl class="dl-horizontal">
372<dt>image_view</dt>
373<dd>the image view. </dd>
374
375<dd>  </dd>
376</dl>
377<h2><a href="../../api/MagickCore/image-view_8c.html" id="GetImageViewVirtualPixels">GetImageViewVirtualPixels</a></h2>
378
379<p>GetImageViewVirtualPixels() returns the image view virtual pixels.</p>
380
381<p>The format of the GetImageViewVirtualPixels method is:</p>
382
383<pre class="text">
384const Quantum *GetImageViewVirtualPixels(const ImageView *image_view)
385</pre>
386
387<p>A description of each parameter follows:</p>
388
389<dd>
390</dd>
391
392<dd> </dd>
393<dl class="dl-horizontal">
394<dt>image_view</dt>
395<dd>the image view. </dd>
396
397<dd>  </dd>
398</dl>
399<h2><a href="../../api/MagickCore/image-view_8c.html" id="IsImageView">IsImageView</a></h2>
400
401<p>IsImageView() returns MagickTrue if the the parameter is verified as a image view object.</p>
402
403<p>The format of the IsImageView method is:</p>
404
405<pre class="text">
406MagickBooleanType IsImageView(const ImageView *image_view)
407</pre>
408
409<p>A description of each parameter follows:</p>
410
411<dd>
412</dd>
413
414<dd> </dd>
415<dl class="dl-horizontal">
416<dt>image_view</dt>
417<dd>the image view. </dd>
418
419<dd>  </dd>
420</dl>
421<h2><a href="../../api/MagickCore/image-view_8c.html" id="NewImageView">NewImageView</a></h2>
422
423<p>NewImageView() returns a image view required for all other methods in the Image View API.</p>
424
425<p>The format of the NewImageView method is:</p>
426
427<pre class="text">
428ImageView *NewImageView(MagickCore *wand,ExceptionInfo *exception)
429</pre>
430
431<p>A description of each parameter follows:</p>
432
433<dd>
434</dd>
435
436<dd> </dd>
437<dl class="dl-horizontal">
438<dt>image</dt>
439<dd>the image. </dd>
440
441<dd> </dd>
442<dt>exception</dt>
443<dd>return any errors or warnings in this structure. </dd>
444
445<dd>  </dd>
446</dl>
447<h2><a href="../../api/MagickCore/image-view_8c.html" id="NewImageViewRegion">NewImageViewRegion</a></h2>
448
449<p>NewImageViewRegion() returns a image view required for all other methods in the Image View API.</p>
450
451<p>The format of the NewImageViewRegion method is:</p>
452
453<pre class="text">
454ImageView *NewImageViewRegion(MagickCore *wand,const ssize_t x,
455  const ssize_t y,const size_t width,const size_t height,
456  ExceptionInfo *exception)
457</pre>
458
459<p>A description of each parameter follows:</p>
460
461<dd>
462</dd>
463
464<dd> </dd>
465<dl class="dl-horizontal">
466<dt>wand</dt>
467<dd>the magick wand. </dd>
468
469<dd> </dd>
470<dt>x,y,columns,rows</dt>
471<dd> These values define the perimeter of a extent of pixel_wands view. </dd>
472
473<dd> </dd>
474<dt>exception</dt>
475<dd>return any errors or warnings in this structure. </dd>
476
477<dd>  </dd>
478</dl>
479<h2><a href="../../api/MagickCore/image-view_8c.html" id="SetImageViewDescription">SetImageViewDescription</a></h2>
480
481<p>SetImageViewDescription() associates a description with an image view.</p>
482
483<p>The format of the SetImageViewDescription method is:</p>
484
485<pre class="text">
486void SetImageViewDescription(ImageView *image_view,
487  const char *description)
488</pre>
489
490<p>A description of each parameter follows:</p>
491
492<dd>
493</dd>
494
495<dd> </dd>
496<dl class="dl-horizontal">
497<dt>image_view</dt>
498<dd>the image view. </dd>
499
500<dd> </dd>
501<dt>description</dt>
502<dd>the image view description. </dd>
503
504<dd>  </dd>
505</dl>
506<h2><a href="../../api/MagickCore/image-view_8c.html" id="SetImageViewIterator">SetImageViewIterator</a></h2>
507
508<p>SetImageViewIterator() iterates over the image 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>
509
510<p>The callback signature is:</p>
511
512<pre class="text">
513MagickBooleanType SetImageViewMethod(ImageView *destination,
514  const ssize_t y,const int thread_id,void *context)
515</pre>
516
517<p>Use this pragma if the view is not single threaded:</p>
518
519<pre class="text">
520    #pragma omp critical
521</pre>
522
523<p>to define a section of code in your callback set method that must be executed by a single thread at a time.</p>
524
525<p>The format of the SetImageViewIterator method is:</p>
526
527<pre class="text">
528MagickBooleanType SetImageViewIterator(ImageView *destination,
529  SetImageViewMethod set,void *context)
530</pre>
531
532<p>A description of each parameter follows:</p>
533
534<dd>
535</dd>
536
537<dd> </dd>
538<dl class="dl-horizontal">
539<dt>destination</dt>
540<dd>the image view. </dd>
541
542<dd> </dd>
543<dt>set</dt>
544<dd>the set callback method. </dd>
545
546<dd> </dd>
547<dt>context</dt>
548<dd>the user defined context. </dd>
549
550<dd>  </dd>
551</dl>
552<h2><a href="../../api/MagickCore/image-view_8c.html" id="TransferImageViewIterator">TransferImageViewIterator</a></h2>
553
554<p>TransferImageViewIterator() iterates over two image 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 image view is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.</p>
555
556<p>The callback signature is:</p>
557
558<pre class="text">
559MagickBooleanType TransferImageViewMethod(const ImageView *source,
560  ImageView *destination,const ssize_t y,const int thread_id,
561  void *context)
562</pre>
563
564<p>Use this pragma if the view is not single threaded:</p>
565
566<pre class="text">
567    #pragma omp critical
568</pre>
569
570<p>to define a section of code in your callback transfer method that must be executed by a single thread at a time.</p>
571
572<p>The format of the TransferImageViewIterator method is:</p>
573
574<pre class="text">
575MagickBooleanType TransferImageViewIterator(ImageView *source,
576  ImageView *destination,TransferImageViewMethod transfer,void *context)
577</pre>
578
579<p>A description of each parameter follows:</p>
580
581<dd>
582</dd>
583
584<dd> </dd>
585<dl class="dl-horizontal">
586<dt>source</dt>
587<dd>the source image view. </dd>
588
589<dd> </dd>
590<dt>destination</dt>
591<dd>the destination image view. </dd>
592
593<dd> </dd>
594<dt>transfer</dt>
595<dd>the transfer callback method. </dd>
596
597<dd> </dd>
598<dt>context</dt>
599<dd>the user defined context. </dd>
600
601<dd>  </dd>
602</dl>
603<h2><a href="../../api/MagickCore/image-view_8c.html" id="UpdateImageViewIterator">UpdateImageViewIterator</a></h2>
604
605<p>UpdateImageViewIterator() iterates over the image 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>
606
607<p>The callback signature is:</p>
608
609<pre class="text">
610MagickBooleanType UpdateImageViewMethod(ImageView *source,
611  const ssize_t y,const int thread_id,void *context)
612</pre>
613
614<p>Use this pragma if the view is not single threaded:</p>
615
616<pre class="text">
617    #pragma omp critical
618</pre>
619
620<p>to define a section of code in your callback update method that must be executed by a single thread at a time.</p>
621
622<p>The format of the UpdateImageViewIterator method is:</p>
623
624<pre class="text">
625MagickBooleanType UpdateImageViewIterator(ImageView *source,
626  UpdateImageViewMethod update,void *context)
627</pre>
628
629<p>A description of each parameter follows:</p>
630
631<dd>
632</dd>
633
634<dd> </dd>
635<dl class="dl-horizontal">
636<dt>source</dt>
637<dd>the source image view. </dd>
638
639<dd> </dd>
640<dt>update</dt>
641<dd>the update callback method. </dd>
642
643<dd> </dd>
644<dt>context</dt>
645<dd>the user defined context. </dd>
646
647<dd>  </dd>
648</dl>
649</div>
650    </div>
651  </main><!-- /.container -->
652  <footer class="magick-footer">
653    <p><a href="../www/www/security-policy.html">Security</a> •
654    <a href="../www/www/architecture.html">Architecture</a>
655
656    <a href="image-view.html#"><img class="d-inline" id="wand" alt="And Now a Touch of Magick" width="16" height="16" src="../www/images/wand.ico"/></a>
657
658    <a href="../www/www/links.html">Related</a> •
659     <a href="../www/www/sitemap.html">Sitemap</a>
660    <br/>
661    <a href="../www/www/support.html">Donate</a> •
662    <a href="http://pgp.mit.edu/pks/lookup?op=get&amp;search=0x89AB63D48277377A">Public Key</a> •
663    <a href="../www/www/contact.html">Contact Us</a>
664    <br/>
665    <small>© 1999-2020 ImageMagick Studio LLC</small></p>
666  </footer>
667
668  <!-- Javascript assets -->
669  <script src="../www/assets/magick.js" crossorigin="anonymous"></script>
670  <script>window.jQuery || document.write('<script src="https://localhost/ajax/libs/jquery/3.4.1/jquery.min.js"><\/script>')</script>
671</body>
672</html>
673<!-- Magick Cache 3rd January 2020 11:30 -->