123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684 |
- #------------------------------------------------------------------------------
- # File: MNG.pm
- #
- # Description: MNG and JNG meta information tags
- #
- # Revisions: 06/23/2005 - P. Harvey Created
- #
- # References: 1) http://www.libpng.org/pub/mng/
- #------------------------------------------------------------------------------
- package Image::ExifTool::MNG;
- use strict;
- use vars qw($VERSION);
- use Image::ExifTool qw(:DataAccess :Utils);
- $VERSION = '1.00';
- # MNG chunks
- %Image::ExifTool::MNG::Main = (
- GROUPS => { 2 => 'Image' },
- NOTES => q{
- This table contains definitions for tags found in MNG and JNG images. MNG
- is a superset of PNG and JNG, so a MNG image may contain any of these tags
- as well as any PNG tags. Conversely, only some of these tags are valid for
- JNG images.
- },
- BACK => {
- Name => 'Background',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::Background' },
- },
- BASI => {
- Name => 'BasisObject',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::BasisObject' },
- },
- CLIP => {
- Name => 'ClipObjects',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::ClipObjects' },
- },
- CLON => {
- Name => 'CloneObject',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::CloneObject' },
- },
- DBYK => {
- Name => 'DropByKeyword',
- Binary => 1,
- },
- DEFI => {
- Name => 'DefineObject',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::DefineObject' },
- },
- DHDR => {
- Name => 'DeltaPNGHeader',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::DeltaPNGHeader' },
- },
- DISC => {
- Name => 'DiscardObjects',
- ValueConv => 'join(" ",unpack("n*",$val))',
- },
- DROP => {
- Name => 'DropChunks',
- ValueConv => 'join(" ",$val=~/..../g)',
- },
- # ENDL
- eXPi => {
- Name => 'ExportImage',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::ExportImage' },
- },
- fPRI => {
- Name => 'FramePriority',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::FramePriority' },
- },
- FRAM => {
- Name => 'Frame',
- Binary => 1,
- },
- # IJNG
- # IPNG
- # JDAA (JNG)
- # JDAT (JNG)
- JHDR => { # (JNG)
- Name => 'JNGHeader',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::JNGHeader' },
- },
- # JSEP (JNG)
- LOOP => {
- Name => 'Loop',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::Loop' },
- },
- MAGN => {
- Name => 'MagnifyObject',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::MagnifyObject' },
- },
- # MEND
- MHDR => {
- Name => 'MNGHeader',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::MNGHeader' },
- },
- MOVE => {
- Name => 'MoveObjects',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::MoveObjects' },
- },
- nEED => {
- Name => 'ResourcesNeeded',
- Binary => 1,
- },
- ORDR => {
- Name => 'OrderingRestrictions',
- Binary => 1,
- },
- PAST => {
- Name => 'PasteImage',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::PasteImage' },
- },
- pHYg => {
- Name => 'GlobalPixelSize',
- SubDirectory => { TagTable => 'Image::ExifTool::PNG::PhysicalPixel' },
- },
- PPLT => {
- Name => 'PartialPalette',
- Binary => 1,
- },
- PROM => {
- Name => 'PromoteParent',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::PromoteParent' },
- },
- SAVE => {
- Name => 'SaveObjects',
- Binary => 1,
- },
- SEEK => {
- Name => 'SeekPoint',
- ValueConv => '$val=~s/\0.*//s; $val',
- },
- SHOW => {
- Name => 'ShowObjects',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::ShowObjects' },
- },
- TERM => {
- Name => 'TerminationAction',
- SubDirectory => { TagTable => 'Image::ExifTool::MNG::TerminationAction' },
- },
- );
- # MNG MHDR chunk
- %Image::ExifTool::MNG::MNGHeader = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- FORMAT => 'int32u',
- 0 => 'ImageWidth',
- 1 => 'ImageHeight',
- 2 => 'TicksPerSecond',
- 3 => 'NominalLayerCount',
- 4 => 'NominalFrameCount',
- 5 => 'NominalPlayTime',
- 6 => {
- Name => 'SimplicityProfile',
- PrintConv => 'sprintf("0x%.8x", $val)',
- },
- );
- # MNG BASI chunk
- %Image::ExifTool::MNG::BasisObject = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'ImageWidth',
- Format => 'int32u',
- },
- 4 => {
- Name => 'ImageHeight',
- Format => 'int32u',
- },
- 8 => 'BitDepth',
- 9 => {
- Name => 'ColorType',
- RawConv => '$Image::ExifTool::PNG::colorType = $val',
- PrintConv => {
- 0 => 'Grayscale',
- 2 => 'RGB',
- 3 => 'Palette',
- 4 => 'Grayscale with Alpha',
- 6 => 'RGB with Alpha',
- },
- },
- 10 => {
- Name => 'Compression',
- PrintConv => { 0 => 'Deflate/Inflate' },
- },
- 11 => {
- Name => 'Filter',
- PrintConv => { 0 => 'Adaptive' },
- },
- 12 => {
- Name => 'Interlace',
- PrintConv => { 0 => 'Noninterlaced', 1 => 'Adam7 Interlace' },
- },
- 13 => {
- Name => 'RedSample',
- Format => 'int32u',
- },
- 17 => {
- Name => 'GreenSample',
- Format => 'int32u',
- },
- 21 => {
- Name => 'BlueSample',
- Format => 'int32u',
- },
- 25 => {
- Name => 'AlphaSample',
- Format => 'int32u',
- },
- 26 => 'Viewable',
- );
- # MNG LOOP chunk
- %Image::ExifTool::MNG::Loop = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => 'NestLevel',
- 1 => {
- Name => 'IterationCount',
- Format => 'int32u',
- },
- 5 => {
- Name => 'TerminationCondition',
- PrintConv => {
- 0 => 'Deterministic, not cacheable',
- 1 => 'Decoder discretion, not cacheable',
- 2 => 'User discretion, not cacheable',
- 3 => 'External signal, not cacheable',
- 4 => 'Deterministic, cacheable',
- 5 => 'Decoder discretion, cacheable',
- 6 => 'User discretion, cacheable',
- 7 => 'External signal, cacheable',
- },
- },
- 6 => {
- Name => 'IterationMinMax',
- Format => 'int32u[2]',
- },
- 14 => {
- Name => 'SignalNumber',
- Format => 'int32u',
- },
- );
- # MNG DEFI chunk
- %Image::ExifTool::MNG::DefineObject = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'ObjectID',
- Format => 'int16u',
- },
- 2 => 'DoNotShow',
- 3 => 'ConcreteFlag',
- 4 => {
- Name => 'XYLocation',
- Format => 'int32u[2]',
- },
- 12 => {
- Name => 'ClippingBoundary',
- Format => 'int32u[4]',
- },
- );
- # MNG CLON chunk
- %Image::ExifTool::MNG::CloneObject = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'SourceID',
- Format => 'int16u',
- },
- 2 => {
- Name => 'CloneID',
- Format => 'int16u',
- },
- 4 => {
- Name => 'CloneType',
- PrintConv => { 0 => 'Full', 1 => 'Parital', 2 => 'Renumber object' },
- },
- 5 => 'DoNotShow',
- 6 => 'ConcreteFlag',
- 7 => {
- Name => 'LocalDeltaType',
- PrintConv => { 0 => 'Absolute', 1 => 'Relative' },
- },
- 8 => {
- Name => 'DeltaXY',
- Format => 'int32u[2]',
- },
- );
- # MNG PAST chunk
- %Image::ExifTool::MNG::PasteImage = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'DestinationID',
- Format => 'int16u',
- },
- 2 => {
- Name => 'TargetDeltaType',
- PrintConv => { 0 => 'Absolute', 1 => 'Relative' },
- },
- 3 => {
- Name => 'TargetXY',
- Format => 'int32u[2]',
- },
- 11 => {
- Name => 'SourceID',
- Format => 'int16u',
- },
- 13 => {
- Name => 'CompositionMode',
- PrintConv => { 0 => 'Over', 1 => 'Replace', 2 => 'Under' },
- },
- 14 => {
- Name => 'Orientation',
- PrintConv => {
- 0 => 'Same as source',
- 2 => 'Flipped left-right, then up-down',
- 4 => 'Flipped left-right',
- 6 => 'Flipped up-down',
- 8 => 'Tiled',
- },
- },
- 15 => {
- Name => 'OffsetOrigin',
- PrintConv => { 0 => 'Desination Origin', 1 => 'Target Origin' },
- },
- 16 => {
- Name => 'OffsetXY',
- Format => 'int32u[2]',
- },
- 24 => {
- Name => 'BoundaryOrigin',
- PrintConv => { 0 => 'Desination Origin', 1 => 'Target Origin' },
- },
- 25 => {
- Name => 'PastClippingBoundary',
- Format => 'int32u[4]',
- },
- );
- my %magMethod = (
- 0 => 'No Magnification',
- 1 => 'Pixel Replication',
- 2 => 'Linear Interpolation',
- 3 => 'Closest Pixel',
- 4 => 'Color Linear Interpolation and Alpha Closest Pixel',
- 5 => 'Color Closest Pixel and Alpha Linear Interpolation',
- );
- # MNG MAGN chunk
- %Image::ExifTool::MNG::MagnifyObject = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'FirstObjectID',
- Format => 'int16u',
- },
- 2 => {
- Name => 'LastObjectID',
- Format => 'int16u',
- },
- 4 => {
- Name => 'XMethod',
- PrintConv => \%magMethod,
- },
- 5 => {
- Name => 'XMag',
- Format => 'int16u',
- },
- 7 => {
- Name => 'YMag',
- Format => 'int16u',
- },
- 9 => {
- Name => 'LeftMag',
- Format => 'int16u',
- },
- 11 => {
- Name => 'RightMag',
- Format => 'int16u',
- },
- 13 => {
- Name => 'TopMag',
- Format => 'int16u',
- },
- 15 => {
- Name => 'BottomMag',
- Format => 'int16u',
- },
- 17 => {
- Name => 'YMethod',
- PrintConv => \%magMethod,
- },
- );
- # MNG TERM chunk
- %Image::ExifTool::MNG::TerminationAction = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'TerminationAction',
- PrintConv => {
- 0 => 'Show Last Frame',
- 1 => 'Display Nothing',
- 2 => 'Show First Frame',
- 3 => 'Repeat Sequence',
- },
- },
- 1 => {
- Name => 'IterationEndAction',
- PrintConv => {
- 0 => 'Show Last Frame',
- 1 => 'Display Nothing',
- 2 => 'Show First Frame',
- },
- },
- 2 => {
- Name => 'Delay',
- Format => 'int32u',
- },
- 6 => {
- Name => 'IterationMax',
- Format => 'int32u',
- },
- );
- # MNG BACK chunk
- %Image::ExifTool::MNG::Background = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'BackgroundColor',
- Format => 'int16u[3]',
- },
- 6 => {
- Name => 'MandatoryBackground',
- PrintConv => {
- 0 => 'Color and Image Advisory',
- 1 => 'Color Mandatory, Image Advisory',
- 2 => 'Color Advisory, Image Mandatory',
- 3 => 'Color and Image Mandatory',
- },
- },
- 7 => {
- Name => 'BackgroundImageID',
- Format => 'int16u',
- },
- 9 => {
- Name => 'BackgroundTiling',
- PrintConv => { 0 => 'No', 1 => 'Yes' },
- },
- );
- # MNG MOVE chunk
- %Image::ExifTool::MNG::MoveObjects = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'FirstObject',
- Format => 'int16u',
- },
- 2 => {
- Name => 'LastObject',
- Format => 'int16u',
- },
- 4 => {
- Name => 'DeltaType',
- PrintConv => { 0 => 'Absolute', 1 => 'Relative' },
- },
- 5 => {
- Name => 'DeltaXY',
- Format => 'int32u[2]',
- },
- );
- # MNG CLIP chunk
- %Image::ExifTool::MNG::ClipObjects = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'FirstObject',
- Format => 'int16u',
- },
- 2 => {
- Name => 'LastObject',
- Format => 'int16u',
- },
- 4 => {
- Name => 'DeltaType',
- PrintConv => { 0 => 'Absolute', 1 => 'Relative' },
- },
- 5 => {
- Name => 'ClipBoundary',
- Format => 'int32u[4]',
- },
- );
- # MNG SHOW chunk
- %Image::ExifTool::MNG::ShowObjects = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'FirstObject',
- Format => 'int16u',
- },
- 2 => {
- Name => 'LastObject',
- Format => 'int16u',
- },
- 4 => 'ShowMode',
- );
- # MNG eXPI chunk
- %Image::ExifTool::MNG::ExportImage = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'SnapshotID',
- Format => 'int16u',
- },
- 2 => {
- Name => 'SnapshotName',
- Format => 'string',
- },
- );
- # MNG fPRI chunk
- %Image::ExifTool::MNG::FramePriority = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'DeltaType',
- PrintConv => { 0 => 'Absolute', 1 => 'Relative' },
- },
- 2 => 'Priority',
- );
- # MNG DHDR chunk
- %Image::ExifTool::MNG::DeltaPNGHeader = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'ObjectID',
- Format => 'int16u',
- },
- 2 => {
- Name => 'ImageType',
- PrintConv => {
- 0 => 'Unspecified',
- 1 => 'PNG',
- 2 => 'JNG',
- },
- },
- 3 => {
- Name => 'DeltaType',
- PrintConv => {
- 0 => 'Full Replacement',
- 1 => 'Pixel Addition',
- 2 => 'Alpha Addition',
- 3 => 'Color Addition',
- 4 => 'Pixel Replacement',
- 5 => 'Alpha Replacement',
- 6 => 'Color Replacement',
- 7 => 'No Change',
- },
- },
- 4 => {
- Name => 'BlockSize',
- Format => 'int32u[2]',
- },
- 12 => {
- Name => 'BlockLocation',
- Format => 'int32u[2]',
- },
- );
- # MNG PROM chunk
- %Image::ExifTool::MNG::PromoteParent = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => 'NewColorType',
- 1 => 'NewBitDepth',
- 2 => {
- Name => 'FillMethod',
- PrintConv => { 0 => 'Bit Replication', 1 => 'Zero Fill' },
- },
- );
- # JNG JHDR chunk
- %Image::ExifTool::MNG::JNGHeader = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 2 => 'Image' },
- 0 => {
- Name => 'ImageWidth',
- Format => 'int32u',
- },
- 4 => {
- Name => 'ImageHeight',
- Format => 'int32u',
- },
- 8 => {
- Name => 'ColorType',
- PrintConv => {
- 8 => 'Gray',
- 10 => 'Color',
- 12 => 'Gray Alpha',
- 14 => 'Color Alpha',
- },
- },
- 9 => 'BitDepth',
- 10 => {
- Name => 'Compression',
- PrintConv => { 8 => 'Huffman-coded baseline JPEG' },
- },
- 11 => {
- Name => 'Interlace',
- PrintConv => { 0 => 'Sequential', 8 => 'Progressive' },
- },
- 12 => 'AlphaBitDepth',
- 13 => {
- Name => 'AlphaCompression',
- PrintConv => {
- 0 => 'MNG Grayscale IDAT',
- 8 => 'JNG 8-bit Grayscale JDAA',
- },
- },
- 14 => {
- Name => 'AlphaFilter',
- PrintConv => { 0 => 'Adaptive MNG (N/A for JPEG)' },
- },
- 15 => {
- Name => 'AlphaInterlace',
- PrintConv => { 0 => 'Noninterlaced' },
- },
- );
- 1; # end
- __END__
- =head1 NAME
- Image::ExifTool::MNG - MNG and JNG meta information tags
- =head1 SYNOPSIS
- This module is used by Image::ExifTool
- =head1 DESCRIPTION
- This module contains definitions required by Image::ExifTool to read MNG
- (Multi-image Network Graphics) and JNG (JPEG Network Graphics) images.
- =head1 AUTHOR
- Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca)
- This library is free software; you can redistribute it and/or modify it
- under the same terms as Perl itself.
- =head1 REFERENCES
- =over 4
- =item L<http://www.libpng.org/pub/mng/>
- =back
- =head1 SEE ALSO
- L<Image::ExifTool::TagNames/MNG Tags>,
- L<Image::ExifTool::TagNames/PNG Tags>,
- L<Image::ExifTool(3pm)|Image::ExifTool>
- =cut
|