Tester utilities
This commit is contained in:
@@ -0,0 +1,684 @@
|
||||
#------------------------------------------------------------------------------
|
||||
# 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-2018, 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
|
||||
|
||||
Reference in New Issue
Block a user