html.c revision b51dff5c0d16a4c1b69ff683e786cb3b4c467694
15d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com/* 25d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 35d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com% % 45d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com% % 55d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com% % 65d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com% H H TTTTT M M L % 75d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com% H H T MM MM L % 833e0cb5e7f9926b96db209c825f1eeca7c15bb16cblume% HHHHH T M M M L % 933e0cb5e7f9926b96db209c825f1eeca7c15bb16cblume% H H T M M L % 1033e0cb5e7f9926b96db209c825f1eeca7c15bb16cblume% H H T M M LLLLL % 1133e0cb5e7f9926b96db209c825f1eeca7c15bb16cblume% % 12c5035e70cc3fb290f95fd1c052c637aa0dbaf9earobertphillips% % 137ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel% Write A Client-Side Image Map Using % 1413dddce65fd87a8175a209a49f35615735a2886aBrian Osman% Image Montage & Directory Information. % 157e910df7f133e80293117bdd069ed25998d10f8cStan Iliev% % 163b66ab6f9fdc6eacdf0ee1921da28751de30c018Brian Osman% Software Design % 17856e9d921462136da8562f8f122d42e114cd4710reed% John Cristy % 1897b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com% July 1992 % 19e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips% % 202c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman% % 213b66ab6f9fdc6eacdf0ee1921da28751de30c018Brian Osman% Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization % 221105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman% dedicated to making software imaging solutions freely available. % 2332342f032e1dfd133040324f851f0365f9d4cb51Brian Osman% % 24fe3b51636d4216c4ea6cb74ed0964c1d315ca487Brian Osman% You may not use this file except in compliance with the License. You may % 25914a36b248ffb538874483d86759254838866dd7Eric Karl% obtain a copy of the License at % 26e8e54580c3c91fd485187af040af118aa5153261Brian Osman% % 27646e4293f06d9de6d44dbfa3c32cdc15a6f5906eRobert Phillips% http://www.imagemagick.org/script/license.php % 28914a36b248ffb538874483d86759254838866dd7Eric Karl% % 29bc7a4fb06780f9829b4b21470fe6f0503d2297cdRobert Phillips% Unless required by applicable law or agreed to in writing, software % 3063954c9944a5eed4527e0ed368f4e501faf2c625Brian Osman% distributed under the License is distributed on an "AS IS" BASIS, % 31f267c1efe7de7a8e71404afde6cbf93c3808d267bsalomon% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 32993a4216a6014b9de8f4d8120360c94550dc6761bsalomon% See the License for the specific language governing permissions and % 33262a71b7f95ce98ff3dd8dba845afbd724470903reed% limitations under the License. % 343b65598bceb65736486db27ed49a56d787032747Brian Osman% % 35262a71b7f95ce98ff3dd8dba845afbd724470903reed%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 367992da32f02f90e0ac9ab6914eb31676b502eb71Brian Osman% 37cb6266b5aa5bbfd880532f08eec83b0c585e873fMatt Sarett% 38b4da01d8f719f3c43d492e8f62a7e2c861e9ef27ericrk*/ 396f1216ac158e36a3a1cc805e7f899c755c5b98a2reed 4003dd6d5208a6e3d92190e7020300e4399178ae4bMatt Sarett/* 41993a4216a6014b9de8f4d8120360c94550dc6761bsalomon Include declarations. 42b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips*/ 43b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips#include "magick/studio.h" 44b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips#include "magick/blob.h" 45a108c92ae5868ca99759a872edddb377f31ad1beRobert Phillips#include "magick/blob-private.h" 46b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips#include "magick/color-private.h" 47b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips#include "magick/colorspace.h" 48b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips#include "magick/constitute.h" 49b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips#include "magick/exception.h" 50b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips#include "magick/exception-private.h" 51b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips#include "magick/geometry.h" 52c9b5f8b1522e72449d704d30ed6aee4fc6211ee8reed#include "magick/list.h" 53cef04f818820e59fb534eb226f967f72497845d3piotaixr#include "magick/magick.h" 546f1216ac158e36a3a1cc805e7f899c755c5b98a2reed#include "magick/memory_.h" 556f1216ac158e36a3a1cc805e7f899c755c5b98a2reed#include "magick/paint.h" 566f1216ac158e36a3a1cc805e7f899c755c5b98a2reed#include "magick/property.h" 576f1216ac158e36a3a1cc805e7f899c755c5b98a2reed#include "magick/quantum-private.h" 586f1216ac158e36a3a1cc805e7f899c755c5b98a2reed#include "magick/static.h" 596f1216ac158e36a3a1cc805e7f899c755c5b98a2reed#include "magick/string_.h" 60396fcdba14a0101ed43dcc3863585bf50c4ed6ccbrianosman#include "magick/module.h" 61396fcdba14a0101ed43dcc3863585bf50c4ed6ccbrianosman#include "magick/utility.h" 62b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips 63396fcdba14a0101ed43dcc3863585bf50c4ed6ccbrianosman/* 64396fcdba14a0101ed43dcc3863585bf50c4ed6ccbrianosman Forward declarations. 65b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips*/ 66396fcdba14a0101ed43dcc3863585bf50c4ed6ccbrianosmanstatic MagickBooleanType 67396fcdba14a0101ed43dcc3863585bf50c4ed6ccbrianosman WriteHTMLImage(const ImageInfo *,Image *); 686251771ebc5c4d7c98af3e2f3f2e7b22e490c1d5Brian Osman 696251771ebc5c4d7c98af3e2f3f2e7b22e490c1d5Brian Osman/* 706251771ebc5c4d7c98af3e2f3f2e7b22e490c1d5Brian Osman%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 716251771ebc5c4d7c98af3e2f3f2e7b22e490c1d5Brian Osman% % 726251771ebc5c4d7c98af3e2f3f2e7b22e490c1d5Brian Osman% % 736251771ebc5c4d7c98af3e2f3f2e7b22e490c1d5Brian Osman% % 746251771ebc5c4d7c98af3e2f3f2e7b22e490c1d5Brian Osman% I s H T M L % 755fa3d6d4b15fd6417de877561f5e4bca422e383cMike Reed% % 765fa3d6d4b15fd6417de877561f5e4bca422e383cMike Reed% % 776f1216ac158e36a3a1cc805e7f899c755c5b98a2reed% % 786f1216ac158e36a3a1cc805e7f899c755c5b98a2reed%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 796f1216ac158e36a3a1cc805e7f899c755c5b98a2reed% 806f1216ac158e36a3a1cc805e7f899c755c5b98a2reed% IsHTML() returns MagickTrue if the image format type, identified by the 816f1216ac158e36a3a1cc805e7f899c755c5b98a2reed% magick string, is HTML. 826f1216ac158e36a3a1cc805e7f899c755c5b98a2reed% 837a542c559a6e584107b94e6254ac3c7f9f24b591Mike Reed% The format of the IsHTML method is: 847a542c559a6e584107b94e6254ac3c7f9f24b591Mike Reed% 857a542c559a6e584107b94e6254ac3c7f9f24b591Mike Reed% MagickBooleanType IsHTML(const unsigned char *magick,const size_t length) 866251771ebc5c4d7c98af3e2f3f2e7b22e490c1d5Brian Osman% 877a542c559a6e584107b94e6254ac3c7f9f24b591Mike Reed% A description of each parameter follows: 887a542c559a6e584107b94e6254ac3c7f9f24b591Mike Reed% 897a542c559a6e584107b94e6254ac3c7f9f24b591Mike Reed% o magick: compare image format pattern against these bytes. 907a542c559a6e584107b94e6254ac3c7f9f24b591Mike Reed% 916251771ebc5c4d7c98af3e2f3f2e7b22e490c1d5Brian Osman% o length: Specifies the length of the magick string. 927a542c559a6e584107b94e6254ac3c7f9f24b591Mike Reed% 937a542c559a6e584107b94e6254ac3c7f9f24b591Mike Reed*/ 94b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillipsstatic MagickBooleanType IsHTML(const unsigned char *magick,const size_t length) 95b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips{ 962084ffa9a3fa7eb3c7e17ec5b55750be9942bafcBrian Salomon if (length < 5) 972084ffa9a3fa7eb3c7e17ec5b55750be9942bafcBrian Salomon return(MagickFalse); 982084ffa9a3fa7eb3c7e17ec5b55750be9942bafcBrian Salomon if (LocaleNCompare((char *) magick,"<html",5) == 0) 99b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips return(MagickTrue); 1008b26b99c97473f020df4b9d4ba789e074e06ceddreed return(MagickFalse); 1018b26b99c97473f020df4b9d4ba789e074e06ceddreed} 102b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips 1037a542c559a6e584107b94e6254ac3c7f9f24b591Mike Reed/* 1048b26b99c97473f020df4b9d4ba789e074e06ceddreed%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1058b26b99c97473f020df4b9d4ba789e074e06ceddreed% % 1066f1216ac158e36a3a1cc805e7f899c755c5b98a2reed% % 1077a542c559a6e584107b94e6254ac3c7f9f24b591Mike Reed% % 1087a542c559a6e584107b94e6254ac3c7f9f24b591Mike Reed% R e g i s t e r H T M L I m a g e % 109095530389d8211895309107a4f74beefacce638creed% % 110095530389d8211895309107a4f74beefacce638creed% % 1118b26b99c97473f020df4b9d4ba789e074e06ceddreed% % 112ace135453db02cfe83d7c7bbeaa679f98d18fbe2reed@google.com%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 113ace135453db02cfe83d7c7bbeaa679f98d18fbe2reed@google.com% 114b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips% RegisterHTMLImage() adds properties for the HTML image format to 1152bbdcc44c63974f29f3743bb58d929601a3f65c6Brian Salomon% the list of supported formats. The properties include the image format 116b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips% tag, a method to read and/or write the format, whether the format 117b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips% supports the saving of more than one frame to the same file or blob, 118b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips% whether the format supports native in-memory I/O, and a brief 11930a38ff737c61799b0f36d2e6ba412f7e612f617Robert Phillips% description of the format. 120b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips% 121b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips% The format of the RegisterHTMLImage method is: 122b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips% 123b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips% size_t RegisterHTMLImage(void) 1247992da32f02f90e0ac9ab6914eb31676b502eb71Brian Osman% 1257992da32f02f90e0ac9ab6914eb31676b502eb71Brian Osman*/ 1267992da32f02f90e0ac9ab6914eb31676b502eb71Brian OsmanModuleExport size_t RegisterHTMLImage(void) 127b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips{ 1284df0092eac6e9bb5afc516773a0c618630193dc6Brian Salomon MagickInfo 1294df0092eac6e9bb5afc516773a0c618630193dc6Brian Salomon *entry; 1304faa0408c1fc414263a3116a76ede20cc52b1d97Greg Daniel 13185d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed entry=SetMagickInfo("HTM"); 13285d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed entry->encoder=(EncodeImageHandler *) WriteHTMLImage; 1338b26b99c97473f020df4b9d4ba789e074e06ceddreed entry->magick=(IsImageFormatHandler *) IsHTML; 1348b26b99c97473f020df4b9d4ba789e074e06ceddreed entry->adjoin=MagickFalse; 1358b26b99c97473f020df4b9d4ba789e074e06ceddreed entry->description=ConstantString( 1368b26b99c97473f020df4b9d4ba789e074e06ceddreed "Hypertext Markup Language and a client-side image map"); 1378b26b99c97473f020df4b9d4ba789e074e06ceddreed entry->module=ConstantString("HTML"); 1388b26b99c97473f020df4b9d4ba789e074e06ceddreed (void) RegisterMagickInfo(entry); 1398b26b99c97473f020df4b9d4ba789e074e06ceddreed entry=SetMagickInfo("HTML"); 1408b26b99c97473f020df4b9d4ba789e074e06ceddreed entry->encoder=(EncodeImageHandler *) WriteHTMLImage; 14197b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com entry->magick=(IsImageFormatHandler *) IsHTML; 1428b26b99c97473f020df4b9d4ba789e074e06ceddreed entry->adjoin=MagickFalse; 1438b26b99c97473f020df4b9d4ba789e074e06ceddreed entry->description=ConstantString( 1448b26b99c97473f020df4b9d4ba789e074e06ceddreed "Hypertext Markup Language and a client-side image map"); 1458b26b99c97473f020df4b9d4ba789e074e06ceddreed entry->module=ConstantString("HTML"); 1468b26b99c97473f020df4b9d4ba789e074e06ceddreed (void) RegisterMagickInfo(entry); 1478b26b99c97473f020df4b9d4ba789e074e06ceddreed entry=SetMagickInfo("SHTML"); 1488b26b99c97473f020df4b9d4ba789e074e06ceddreed entry->encoder=(EncodeImageHandler *) WriteHTMLImage; 1498b26b99c97473f020df4b9d4ba789e074e06ceddreed entry->magick=(IsImageFormatHandler *) IsHTML; 1508b26b99c97473f020df4b9d4ba789e074e06ceddreed entry->adjoin=MagickFalse; 1515d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com entry->description=ConstantString( 1524af267b11964d4a8acdb232ac46094c84d890e88reed "Hypertext Markup Language and a client-side image map"); 153fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com entry->module=ConstantString("HTML"); 1540ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips (void) RegisterMagickInfo(entry); 1550ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips return(MagickImageCoderSignature); 1567ee385e1dc3cd6a47dc8f7297fef6e175eaba224Robert Phillips} 1570ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips 158eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips/* 159eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 160eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips% % 161eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips% % 162eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips% % 163eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips% U n r e g i s t e r H T M L I m a g e % 164eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips% % 1650ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips% % 1667ee385e1dc3cd6a47dc8f7297fef6e175eaba224Robert Phillips% % 1670ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1680ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips% 1697ee385e1dc3cd6a47dc8f7297fef6e175eaba224Robert Phillips% UnregisterHTMLImage() removes format registrations made by the 1700ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips% HTML module from the list of supported formats. 171eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips% 1720ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips% The format of the UnregisterHTMLImage method is: 1730ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips% 1740ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips% UnregisterHTMLImage(void) 1750ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips% 1760ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips*/ 1770ae6faa34d73ffc7ebec3d13f0473703bade821bRobert PhillipsModuleExport void UnregisterHTMLImage(void) 1780ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips{ 1790ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips (void) UnregisterMagickInfo("HTM"); 1800ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips (void) UnregisterMagickInfo("HTML"); 1810ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips (void) UnregisterMagickInfo("SHTML"); 182eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips} 183eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips 184eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips/* 185eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 186eee4d6e4e8cc5c4c79f065abcc3ce609f71238f9Robert Phillips% % 1870ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips% % 1880ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips% % 18903dd6d5208a6e3d92190e7020300e4399178ae4bMatt Sarett% W r i t e H T M L I m a g e % 190095530389d8211895309107a4f74beefacce638creed% % 19103dd6d5208a6e3d92190e7020300e4399178ae4bMatt Sarett% % 192cb6266b5aa5bbfd880532f08eec83b0c585e873fMatt Sarett% % 193cb6266b5aa5bbfd880532f08eec83b0c585e873fMatt Sarett%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 194cb6266b5aa5bbfd880532f08eec83b0c585e873fMatt Sarett% 19503dd6d5208a6e3d92190e7020300e4399178ae4bMatt Sarett% WriteHTMLImage() writes an image in the HTML encoded image format. 19603dd6d5208a6e3d92190e7020300e4399178ae4bMatt Sarett% 19703dd6d5208a6e3d92190e7020300e4399178ae4bMatt Sarett% The format of the WriteHTMLImage method is: 19803dd6d5208a6e3d92190e7020300e4399178ae4bMatt Sarett% 19903dd6d5208a6e3d92190e7020300e4399178ae4bMatt Sarett% MagickBooleanType WriteHTMLImage(const ImageInfo *image_info,Image *image) 200b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips% 201b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips% A description of each parameter follows. 2028b26b99c97473f020df4b9d4ba789e074e06ceddreed% 20303dd6d5208a6e3d92190e7020300e4399178ae4bMatt Sarett% o image_info: the image info. 2048b26b99c97473f020df4b9d4ba789e074e06ceddreed% 205e78b7259c3d5cbed77b4390150cfb699b0b59cd4Robert Phillips% o image: The image. 2068b26b99c97473f020df4b9d4ba789e074e06ceddreed% 207b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips% 208a8ac92418807e3d46a45413459e6895160134c1dBrian Osman*/ 209a8ac92418807e3d46a45413459e6895160134c1dBrian Osmanstatic MagickBooleanType WriteHTMLImage(const ImageInfo *image_info, 210a8ac92418807e3d46a45413459e6895160134c1dBrian Osman Image *image) 211a8ac92418807e3d46a45413459e6895160134c1dBrian Osman{ 212a8ac92418807e3d46a45413459e6895160134c1dBrian Osman char 213a8ac92418807e3d46a45413459e6895160134c1dBrian Osman basename[MaxTextExtent], 214a8ac92418807e3d46a45413459e6895160134c1dBrian Osman buffer[MaxTextExtent], 215a8ac92418807e3d46a45413459e6895160134c1dBrian Osman filename[MaxTextExtent], 216a8ac92418807e3d46a45413459e6895160134c1dBrian Osman mapname[MaxTextExtent], 217a8ac92418807e3d46a45413459e6895160134c1dBrian Osman url[MaxTextExtent]; 218a8ac92418807e3d46a45413459e6895160134c1dBrian Osman 2192084ffa9a3fa7eb3c7e17ec5b55750be9942bafcBrian Salomon Image 220a8ac92418807e3d46a45413459e6895160134c1dBrian Osman *next; 221b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips 222b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips ImageInfo 223b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips *write_info; 224b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips 225b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips MagickBooleanType 2268b26b99c97473f020df4b9d4ba789e074e06ceddreed status; 2278b26b99c97473f020df4b9d4ba789e074e06ceddreed 228b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips RectangleInfo 2298b26b99c97473f020df4b9d4ba789e074e06ceddreed geometry; 2308b26b99c97473f020df4b9d4ba789e074e06ceddreed 2318b26b99c97473f020df4b9d4ba789e074e06ceddreed register char 2328b26b99c97473f020df4b9d4ba789e074e06ceddreed *p; 2338b26b99c97473f020df4b9d4ba789e074e06ceddreed 2348b26b99c97473f020df4b9d4ba789e074e06ceddreed /* 2358b26b99c97473f020df4b9d4ba789e074e06ceddreed Open image. 2368b26b99c97473f020df4b9d4ba789e074e06ceddreed */ 23703dd6d5208a6e3d92190e7020300e4399178ae4bMatt Sarett assert(image_info != (const ImageInfo *) NULL); 23803dd6d5208a6e3d92190e7020300e4399178ae4bMatt Sarett assert(image_info->signature == MagickSignature); 2398b26b99c97473f020df4b9d4ba789e074e06ceddreed assert(image != (Image *) NULL); 2408b26b99c97473f020df4b9d4ba789e074e06ceddreed assert(image->signature == MagickSignature); 2415d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com if (image->debug != MagickFalse) 2424af267b11964d4a8acdb232ac46094c84d890e88reed (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s", 2437fb4f8bd031eda87e1da9bc0f749968c0e872e6freed image_info->filename); 24463e7973d1f01bd03216659b9d2267f83a752c8fbBrian Salomon status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception); 24516d8ec66cdce2f30ce89b87066d3ac7a244c460dRobert Phillips if (status == MagickFalse) 2467b6945bc4e639d7cc4a49b84d492690f8e865566reed return(status); 2477b6945bc4e639d7cc4a49b84d492690f8e865566reed (void) CloseBlob(image); 24816d8ec66cdce2f30ce89b87066d3ac7a244c460dRobert Phillips if (image->colorspace != RGBColorspace) 2497b6945bc4e639d7cc4a49b84d492690f8e865566reed (void) TransformImageColorspace(image,RGBColorspace); 250b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips *url='\0'; 251e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips if ((LocaleCompare(image_info->magick,"FTP") == 0) || 252e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips (LocaleCompare(image_info->magick,"HTTP") == 0)) 253e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips { 254e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips /* 255e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips Extract URL base from filename. 256e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips */ 257e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips p=strrchr(image->filename,'/'); 258b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips if (p) 259e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips { 260e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips p++; 261e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips (void) CopyMagickString(url,image_info->magick,MaxTextExtent); 262b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips (void) ConcatenateMagickString(url,":",MaxTextExtent); 263b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips url[strlen(url)+p-image->filename]='\0'; 264b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips (void) ConcatenateMagickString(url,image->filename, 265e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips p-image->filename+2); 2667b6945bc4e639d7cc4a49b84d492690f8e865566reed (void) CopyMagickString(image->filename,p,MaxTextExtent); 2677b6945bc4e639d7cc4a49b84d492690f8e865566reed } 2688b26b99c97473f020df4b9d4ba789e074e06ceddreed } 2698b26b99c97473f020df4b9d4ba789e074e06ceddreed /* 2707ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel Refer to image map file. 2717ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel */ 2727ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) CopyMagickString(filename,image->filename,MaxTextExtent); 273dddbe380b0e6b690041a4e020aefe57f1b21691abrianosman AppendImageFormat("map",filename); 274dddbe380b0e6b690041a4e020aefe57f1b21691abrianosman GetPathComponent(filename,BasePath,basename); 2757fb4f8bd031eda87e1da9bc0f749968c0e872e6freed (void) CopyMagickString(mapname,basename,MaxTextExtent); 2767fb4f8bd031eda87e1da9bc0f749968c0e872e6freed (void) CopyMagickString(image->filename,image_info->filename,MaxTextExtent); 2777ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) CopyMagickString(filename,image->filename,MaxTextExtent); 27896fcdcc219d2a0d3579719b84b28bede76efba64halcanary write_info=CloneImageInfo(image_info); 2798b26b99c97473f020df4b9d4ba789e074e06ceddreed write_info->adjoin=MagickTrue; 2800ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips status=MagickTrue; 281b0e93a22bbfad05bb834e33387880ece56e0f6d2Robert Phillips if (LocaleCompare(image_info->magick,"SHTML") != 0) 2828b26b99c97473f020df4b9d4ba789e074e06ceddreed { 28396fcdcc219d2a0d3579719b84b28bede76efba64halcanary const char 2848b26b99c97473f020df4b9d4ba789e074e06ceddreed *value; 285de49988bc24977f97bb1da8c17ceee5432fcc8e7reed 286de49988bc24977f97bb1da8c17ceee5432fcc8e7reed /* 287de49988bc24977f97bb1da8c17ceee5432fcc8e7reed Open output image file. 288de49988bc24977f97bb1da8c17ceee5432fcc8e7reed */ 28985d34b2e841d99dab914111fe2eaa4db99345e1eBrian Osman status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception); 290066f020bb6cb9dbb12b977fcddd93982201777feRobert Phillips if (status == MagickFalse) 2910ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips return(status); 2920ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips /* 2936dc6f5f4a153d33ed91565cb3cd397a310a937d0bsalomon Write the HTML image file. 2946dc6f5f4a153d33ed91565cb3cd397a310a937d0bsalomon */ 2959440345a81d6c2372ac0aed937080f3da67439ddGreg Daniel (void) WriteBlobString(image,"<?xml version=\"1.0\" " 2969440345a81d6c2372ac0aed937080f3da67439ddGreg Daniel "encoding=\"US-ASCII\"?>\n"); 2979440345a81d6c2372ac0aed937080f3da67439ddGreg Daniel (void) WriteBlobString(image,"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML " 2989440345a81d6c2372ac0aed937080f3da67439ddGreg Daniel "1.0 Strict//EN\" " 2997ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"); 3007ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) WriteBlobString(image,"<html>\n"); 3019440345a81d6c2372ac0aed937080f3da67439ddGreg Daniel (void) WriteBlobString(image,"<head>\n"); 3029440345a81d6c2372ac0aed937080f3da67439ddGreg Daniel value=GetImageProperty(image,"label"); 3039440345a81d6c2372ac0aed937080f3da67439ddGreg Daniel if (value != (const char *) NULL) 3049440345a81d6c2372ac0aed937080f3da67439ddGreg Daniel (void) FormatLocaleString(buffer,MaxTextExtent,"<title>%s</title>\n", 3059440345a81d6c2372ac0aed937080f3da67439ddGreg Daniel value); 3067ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel else 3077ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel { 3087ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel GetPathComponent(filename,BasePath,basename); 3097ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) FormatLocaleString(buffer,MaxTextExtent, 3107ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel "<title>%s</title>\n",basename); 3117ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel } 3127ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) WriteBlobString(image,buffer); 3137ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) WriteBlobString(image,"</head>\n"); 3148fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon (void) WriteBlobString(image,"<body style=\"text-align: center;\">\n"); 3158fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon (void) FormatLocaleString(buffer,MaxTextExtent,"<h1>%s</h1>\n", 3168fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon image->filename); 3178fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon (void) WriteBlobString(image,buffer); 3188fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon (void) WriteBlobString(image,"<div>\n"); 319d20b5c489b5709a4d251c0cc68d584ea4514594eMike Reed (void) CopyMagickString(filename,image->filename,MaxTextExtent); 3208fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon AppendImageFormat("png",filename); 3218fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon (void) FormatLocaleString(buffer,MaxTextExtent,"<img usemap=\"#%s\" " 3228fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon "src=\"%s\" style=\"border: 0;\" alt=\"Image map\" />\n",mapname, 3238fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon filename); 324fcd5fddb0264d062a461435618ad54a29ff80fc0Robert Phillips (void) WriteBlobString(image,buffer); 3258fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon /* 3268fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon Determine the size and location of each image tile. 3278fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon */ 3288fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon SetGeometry(image,&geometry); 3298fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon if (image->montage != (char *) NULL) 3308fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon (void) ParseAbsoluteGeometry(image->montage,&geometry); 3318fe24272fa6d2fa9eb2458221ed9852d6ec16f56Brian Salomon /* 3329440345a81d6c2372ac0aed937080f3da67439ddGreg Daniel Write an image map. 3339440345a81d6c2372ac0aed937080f3da67439ddGreg Daniel */ 334b445a57e6c36cce86580b618701b5af708a6f271jbauman (void) FormatLocaleString(buffer,MaxTextExtent, 335b445a57e6c36cce86580b618701b5af708a6f271jbauman "<map id=\"%s\" name=\"%s\">\n",mapname,mapname); 336b445a57e6c36cce86580b618701b5af708a6f271jbauman (void) WriteBlobString(image,buffer); 337b445a57e6c36cce86580b618701b5af708a6f271jbauman (void) FormatLocaleString(buffer,MaxTextExtent," <area href=\"%s", 338dddbe380b0e6b690041a4e020aefe57f1b21691abrianosman url); 339dddbe380b0e6b690041a4e020aefe57f1b21691abrianosman (void) WriteBlobString(image,buffer); 3405ec26ae9bfca635ccc98283aad5deda11519d826bsalomon if (image->directory == (char *) NULL) 341993a4216a6014b9de8f4d8120360c94550dc6761bsalomon { 342b445a57e6c36cce86580b618701b5af708a6f271jbauman (void) FormatLocaleString(buffer,MaxTextExtent, 343b445a57e6c36cce86580b618701b5af708a6f271jbauman "%s\" shape=\"rect\" coords=\"0,0,%.20g,%.20g\" alt=\"\" />\n", 344b445a57e6c36cce86580b618701b5af708a6f271jbauman image->filename,(double) geometry.width-1,(double) geometry.height- 345b445a57e6c36cce86580b618701b5af708a6f271jbauman 1); 346b445a57e6c36cce86580b618701b5af708a6f271jbauman (void) WriteBlobString(image,buffer); 34796fcdcc219d2a0d3579719b84b28bede76efba64halcanary } 348993a4216a6014b9de8f4d8120360c94550dc6761bsalomon else 349b445a57e6c36cce86580b618701b5af708a6f271jbauman for (p=image->directory; *p != '\0'; p++) 350b445a57e6c36cce86580b618701b5af708a6f271jbauman if (*p != '\n') 351b445a57e6c36cce86580b618701b5af708a6f271jbauman (void) WriteBlobByte(image,(unsigned char) *p); 3527ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel else 3537ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel { 3547ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) FormatLocaleString(buffer,MaxTextExtent,"\" shape=" 3557ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel "\"rect\" coords=\"%.20g,%.20g,%.20g,%.20g\" alt=\"\" />\n", 3567ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (double) geometry.x,(double) geometry.y,(double) (geometry.x+ 3577ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel geometry.width-1),(double) (geometry.y+geometry.height-1)); 3587ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) WriteBlobString(image,buffer); 3597ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel if (*(p+1) != '\0') 3607ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel { 3617ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) FormatLocaleString(buffer,MaxTextExtent, 3627ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel " <area href=%s\"",url); 3637ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) WriteBlobString(image,buffer); 3647ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel } 3657ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel geometry.x+=(ssize_t) geometry.width; 3667ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel if ((geometry.x+4) >= (ssize_t) image->columns) 367bc7a4fb06780f9829b4b21470fe6f0503d2297cdRobert Phillips { 368b445a57e6c36cce86580b618701b5af708a6f271jbauman geometry.x=0; 369bc7a4fb06780f9829b4b21470fe6f0503d2297cdRobert Phillips geometry.y+=(ssize_t) geometry.height; 370b445a57e6c36cce86580b618701b5af708a6f271jbauman } 3717ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel } 3727ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) WriteBlobString(image,"</map>\n"); 3737ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) CopyMagickString(filename,image->filename,MaxTextExtent); 3747ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) WriteBlobString(image,"</div>\n"); 3757ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) WriteBlobString(image,"</body>\n"); 3767ef28f35a2f7d17b90c776f76d4b374ccee6c347Greg Daniel (void) WriteBlobString(image,"</html>\n"); 377b445a57e6c36cce86580b618701b5af708a6f271jbauman (void) CloseBlob(image); 378bc7a4fb06780f9829b4b21470fe6f0503d2297cdRobert Phillips /* 37996fcdcc219d2a0d3579719b84b28bede76efba64halcanary Write the image as PNG. 380993a4216a6014b9de8f4d8120360c94550dc6761bsalomon */ 381993a4216a6014b9de8f4d8120360c94550dc6761bsalomon (void) CopyMagickString(image->filename,filename,MaxTextExtent); 382d4c741e3d0e0fa633399691c47f76b6c7841ee83robertphillips AppendImageFormat("png",image->filename); 383d4c741e3d0e0fa633399691c47f76b6c7841ee83robertphillips next=GetNextImageInList(image); 384d4c741e3d0e0fa633399691c47f76b6c7841ee83robertphillips image->next=NewImageList(); 385993a4216a6014b9de8f4d8120360c94550dc6761bsalomon (void) CopyMagickString(image->magick,"PNG",MaxTextExtent); 386dd3b3f41829d32d7eaf3eb4903570d49c2ba9ff8Robert Phillips (void) WriteImage(write_info,image); 3871105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman image->next=next; 3881105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman /* 3891105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman Determine image map filename. 3901105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman */ 3911105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman GetPathComponent(image->filename,BasePath,filename); 392e1da1d9a7dfa6c9ebdcbd2845acebd045edd2a6fGreg Daniel (void) ConcatenateMagickString(filename,"_map.shtml",MaxTextExtent); 3931105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman (void) CopyMagickString(image->filename,filename,MaxTextExtent); 3941105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman } 39596fcdcc219d2a0d3579719b84b28bede76efba64halcanary /* 396993a4216a6014b9de8f4d8120360c94550dc6761bsalomon Open image map. 397993a4216a6014b9de8f4d8120360c94550dc6761bsalomon */ 398993a4216a6014b9de8f4d8120360c94550dc6761bsalomon status=OpenBlob(write_info,image,WriteBinaryBlobMode,&image->exception); 3997d954ad797176afedb9262fdea4507d0fc60eb9dMike Reed if (status == MagickFalse) 400fbcef6eb8abad142daf45418516550f7635b4a52Robert Phillips return(status); 401fbcef6eb8abad142daf45418516550f7635b4a52Robert Phillips write_info=DestroyImageInfo(write_info); 402993a4216a6014b9de8f4d8120360c94550dc6761bsalomon /* 403b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips Determine the size and location of each image tile. 404c9a3706f1ee38c331610ec1e872d9a658566c397robertphillips */ 40582f44319159bb98dcacdbbec7ea643dde5ed024bBrian Salomon SetGeometry(image,&geometry); 406e60ad620fe236ce4c1e85a31bd53ed0c848da8c3Robert Phillips if (image->montage != (char *) NULL) 4077ee385e1dc3cd6a47dc8f7297fef6e175eaba224Robert Phillips (void) ParseAbsoluteGeometry(image->montage,&geometry); 408e60ad620fe236ce4c1e85a31bd53ed0c848da8c3Robert Phillips /* 409e60ad620fe236ce4c1e85a31bd53ed0c848da8c3Robert Phillips Write an image map. 4107ee385e1dc3cd6a47dc8f7297fef6e175eaba224Robert Phillips */ 411b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips (void) FormatLocaleString(buffer,MaxTextExtent, 412b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips "<map id=\"%s\" name=\"%s\">\n",mapname,mapname); 413b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips (void) WriteBlobString(image,buffer); 414b726d58efc91c4eefa5cea0881a823ee108db8fdRobert Phillips (void) FormatLocaleString(buffer,MaxTextExtent," <area href=\"%s",url); 41575a475cf2e7c66eb58b6b8b1441deb5911e53181Robert Phillips (void) WriteBlobString(image,buffer); 416993a4216a6014b9de8f4d8120360c94550dc6761bsalomon if (image->directory == (char *) NULL) 4175617900063f69754de62b8b12d32f6e36df14104reed { 418b445a57e6c36cce86580b618701b5af708a6f271jbauman (void) FormatLocaleString(buffer,MaxTextExtent, 419b445a57e6c36cce86580b618701b5af708a6f271jbauman "%s\" shape=\"rect\" coords=\"0,0,%.20g,%.20g\" alt=\"\" />\n", 420dddbe380b0e6b690041a4e020aefe57f1b21691abrianosman image->filename,(double) geometry.width-1,(double) geometry.height-1); 421dddbe380b0e6b690041a4e020aefe57f1b21691abrianosman (void) WriteBlobString(image,buffer); 422dddbe380b0e6b690041a4e020aefe57f1b21691abrianosman } 423dddbe380b0e6b690041a4e020aefe57f1b21691abrianosman else 424b445a57e6c36cce86580b618701b5af708a6f271jbauman for (p=image->directory; *p != '\0'; p++) 425b445a57e6c36cce86580b618701b5af708a6f271jbauman if (*p != '\n') 426b445a57e6c36cce86580b618701b5af708a6f271jbauman (void) WriteBlobByte(image,(unsigned char) *p); 427b445a57e6c36cce86580b618701b5af708a6f271jbauman else 428b445a57e6c36cce86580b618701b5af708a6f271jbauman { 429dddbe380b0e6b690041a4e020aefe57f1b21691abrianosman (void) FormatLocaleString(buffer,MaxTextExtent,"\" shape=\"rect\"" 430dddbe380b0e6b690041a4e020aefe57f1b21691abrianosman " coords=\"%.20g,%.20g,%.20g,%.20g\" alt=\"\" />\n", 431dddbe380b0e6b690041a4e020aefe57f1b21691abrianosman (double) geometry.x,(double) geometry.y,geometry.x+(double) 432dddbe380b0e6b690041a4e020aefe57f1b21691abrianosman geometry.width-1,geometry.y+(double) geometry.height-1); 433b445a57e6c36cce86580b618701b5af708a6f271jbauman (void) WriteBlobString(image,buffer); 434b445a57e6c36cce86580b618701b5af708a6f271jbauman if (*(p+1) != '\0') 4353798c86f6885f0b47fb2e659a43b48a4468a97efRobert Phillips { 4363798c86f6885f0b47fb2e659a43b48a4468a97efRobert Phillips (void) FormatLocaleString(buffer,MaxTextExtent, 437041f7dfc577822f1e97721a865f86a9a02660cf9Brian Osman " <area href=%s\"",url); 438041f7dfc577822f1e97721a865f86a9a02660cf9Brian Osman (void) WriteBlobString(image,buffer); 4392bbdcc44c63974f29f3743bb58d929601a3f65c6Brian Salomon } 4402bbdcc44c63974f29f3743bb58d929601a3f65c6Brian Salomon geometry.x+=(ssize_t) geometry.width; 4413798c86f6885f0b47fb2e659a43b48a4468a97efRobert Phillips if ((geometry.x+4) >= (ssize_t) image->columns) 442041f7dfc577822f1e97721a865f86a9a02660cf9Brian Osman { 443041f7dfc577822f1e97721a865f86a9a02660cf9Brian Osman geometry.x=0; 4443798c86f6885f0b47fb2e659a43b48a4468a97efRobert Phillips geometry.y+=(ssize_t) geometry.height; 4453798c86f6885f0b47fb2e659a43b48a4468a97efRobert Phillips } 446041f7dfc577822f1e97721a865f86a9a02660cf9Brian Osman } 447041f7dfc577822f1e97721a865f86a9a02660cf9Brian Osman (void) WriteBlobString(image,"</map>\n"); 4482c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman (void) CloseBlob(image); 449041f7dfc577822f1e97721a865f86a9a02660cf9Brian Osman (void) CopyMagickString(image->filename,filename,MaxTextExtent); 450041f7dfc577822f1e97721a865f86a9a02660cf9Brian Osman return(status); 451041f7dfc577822f1e97721a865f86a9a02660cf9Brian Osman} 4528744405448b9402e1368aebd321c4f555543301aRobert Phillips