info.c revision de984cdc3631106b1cbbb8d3972b76a0fc27e8e8
1/* 2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3% % 4% % 5% % 6% IIIII N N FFFFF OOO % 7% I NN N F O O % 8% I N N N FFF O O % 9% I N NN F O O % 10% IIIII N N F OOO % 11% % 12% % 13% Write Info About the Image. % 14% % 15% Software Design % 16% Cristy % 17% July 1992 % 18% % 19% % 20% Copyright 1999-2014 ImageMagick Studio LLC, a non-profit organization % 21% dedicated to making software imaging solutions freely available. % 22% % 23% You may not use this file except in compliance with the License. You may % 24% obtain a copy of the License at % 25% % 26% http://www.imagemagick.org/script/license.php % 27% % 28% Unless required by applicable law or agreed to in writing, software % 29% distributed under the License is distributed on an "AS IS" BASIS, % 30% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 31% See the License for the specific language governing permissions and % 32% limitations under the License. % 33% % 34%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 35% 36% 37*/ 38 39/* 40 Include declarations. 41*/ 42#include "MagickCore/studio.h" 43#include "MagickCore/artifact.h" 44#include "MagickCore/blob.h" 45#include "MagickCore/blob-private.h" 46#include "MagickCore/colorspace.h" 47#include "MagickCore/exception.h" 48#include "MagickCore/exception-private.h" 49#include "MagickCore/identify.h" 50#include "MagickCore/image.h" 51#include "MagickCore/image-private.h" 52#include "MagickCore/list.h" 53#include "MagickCore/magick.h" 54#include "MagickCore/memory_.h" 55#include "MagickCore/monitor.h" 56#include "MagickCore/monitor-private.h" 57#include "MagickCore/option.h" 58#include "MagickCore/property.h" 59#include "MagickCore/quantum-private.h" 60#include "MagickCore/static.h" 61#include "MagickCore/string_.h" 62#include "MagickCore/module.h" 63#include "MagickCore/utility.h" 64 65/* 66 Forward declarations. 67*/ 68static MagickBooleanType 69 WriteINFOImage(const ImageInfo *,Image *,ExceptionInfo *); 70 71/* 72%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 73% % 74% % 75% % 76% R e g i s t e r I N F O I m a g e % 77% % 78% % 79% % 80%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 81% 82% RegisterINFOImage() adds attributes for the INFO image format to 83% the list of supported formats. The attributes include the image format 84% tag, a method to read and/or write the format, whether the format 85% supports the saving of more than one frame to the same file or blob, 86% whether the format supports native in-memory I/O, and a brief 87% description of the format. 88% 89% The format of the RegisterINFOImage method is: 90% 91% size_t RegisterINFOImage(void) 92% 93*/ 94ModuleExport size_t RegisterINFOImage(void) 95{ 96 MagickInfo 97 *entry; 98 99 entry=SetMagickInfo("INFO"); 100 entry->encoder=(EncodeImageHandler *) WriteINFOImage; 101 entry->blob_support=MagickFalse; 102 entry->description=ConstantString("The image format and characteristics"); 103 entry->module=ConstantString("INFO"); 104 (void) RegisterMagickInfo(entry); 105 return(MagickImageCoderSignature); 106} 107 108/* 109%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 110% % 111% % 112% % 113% U n r e g i s t e r I N F O I m a g e % 114% % 115% % 116% % 117%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 118% 119% UnregisterINFOImage() removes format registrations made by the 120% INFO module from the list of supported formats. 121% 122% The format of the UnregisterINFOImage method is: 123% 124% UnregisterINFOImage(void) 125% 126*/ 127ModuleExport void UnregisterINFOImage(void) 128{ 129 (void) UnregisterMagickInfo("INFO"); 130} 131 132/* 133%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 134% % 135% % 136% % 137% W r i t e I N F O I m a g e % 138% % 139% % 140% % 141%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 142% 143% WriteINFOImage writes the pixel values as text numbers. 144% 145% The format of the WriteINFOImage method is: 146% 147% MagickBooleanType WriteINFOImage(const ImageInfo *image_info, 148% Image *image,ExceptionInfo *exception) 149% 150% A description of each parameter follows. 151% 152% o image_info: the image info. 153% 154% o image: The image. 155% 156% o exception: return any errors or warnings in this structure. 157% 158*/ 159static MagickBooleanType WriteINFOImage(const ImageInfo *image_info, 160 Image *image,ExceptionInfo *exception) 161{ 162 const char 163 *format; 164 165 MagickBooleanType 166 status; 167 168 MagickOffsetType 169 scene; 170 171 /* 172 Open output image file. 173 */ 174 assert(image_info != (const ImageInfo *) NULL); 175 assert(image_info->signature == MagickSignature); 176 assert(image != (Image *) NULL); 177 assert(image->signature == MagickSignature); 178 if (image->debug != MagickFalse) 179 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 180 status=OpenBlob(image_info,image,WriteBlobMode,exception); 181 if (status == MagickFalse) 182 return(status); 183 scene=0; 184 do 185 { 186 format=GetImageOption(image_info,"format"); 187 if (format == (char *) NULL) 188 { 189 (void) CopyMagickString(image->filename,image->magick_filename, 190 MaxTextExtent); 191 image->magick_columns=image->columns; 192 image->magick_rows=image->rows; 193 (void) IdentifyImage(image,GetBlobFileHandle(image), 194 image_info->verbose,exception); 195 } 196 else 197 { 198 char 199 *text; 200 201 text=InterpretImageProperties((ImageInfo *) image_info,image,format, 202 exception); 203 if (text != (char *) NULL) 204 { 205 (void) WriteBlobString(image,text); 206 text=DestroyString(text); 207 } 208 } 209 if (GetNextImageInList(image) == (Image *) NULL) 210 break; 211 image=SyncNextImageInList(image); 212 status=SetImageProgress(image,SaveImagesTag,scene++, 213 GetImageListLength(image)); 214 if (status == MagickFalse) 215 break; 216 } while (image_info->adjoin != MagickFalse); 217 (void) CloseBlob(image); 218 return(MagickTrue); 219} 220