Image::Info::SVG − SVG support for Image::Info
use Image::Info
qw(image_info dim);
my $info = image_info("image.svg");
if (my $error = $info−>{error}) {
die "Can't parse image info: $error\n";
}
my $title = $info−>{SVG_Title};
my($w, $h) = dim($info);
This modules
supplies the standard key names except for BitsPerSample,
Compression, Gamma, Interlace, LastModificationTime, as well
as:
ImageDescription
The image description, corresponds to <desc>.
SVG_Image
A scalar or reference to an array of scalars containing the URI’s of embedded images (JPG or PNG) that are embedded in the image.
SVG_StandAlone
Whether or not the image is standalone.
SVG_Title
The image title, corresponds to <title>
SVG_Version
The URI of the DTD the image conforms to.
$info−>process_file($source, $options);
Processes one file and sets the found info fields in the $info object.
This module requires either XML::LibXML::Reader or XML::Simple.
Previous versions (until Image−Info−1.28) used XML::Simple as the underlying parser. Since Image−Info−1.29 the default parser is XML::LibXML::Reader which is much more faster, memory-efficient, and does not rely on regular expressions for some aspects of XML parsing. If for some reason you need the old parser, you can force it by setting the variable @Image::Info::SVG::PREFER_MODULE as early as possible:
use Image::Info;
@Image::Info::SVG::PREFER_MODULE =
qw(Image::Info::SVG::XMLSimple
Image::Info::SVG::XMLLibXMLReader);
The variable $Image::Info::SVG::USING_MODULE can be queried to see which parser is in use (after Image::Info::SVG is required).
Since 1.38_50 processing of XML external entities (XXE) is not done anymore for security reasons in both backends (Image::Info::SVG::XMLLibXMLReader and Image::Info::SVG::XMLSimple). Controlling XXE processing behavior in XML::Simple is not really possible (see <https://rt.cpan.org/Ticket/Display.html?id=83794>), so as a workaround the underlying SAX parser is fixed to XML::SAX::PurePerl which is uncapable of processing external entities â but unfortunately it is also a slow parser.
Image::Info, XML::LibXML::Reader, XML::Simple, XML::SAX::PurePerl
For more information about SVG see <http://www.w3.org/Graphics/SVG/>
Random notes:
Colors
# iterate over
polygon,rect,circle,ellipse,line,polyline,text for
style−>stroke: style−>fill:?
# and iterate over each of these within <g> too?! and
recurse?!
# append <color>'s
# perhaps even deep recursion through <svg>'s?
ColorProfile <color−profile>
RenderingIntent ?
requiredFeatures
requiredExtensions
systemLanguage
Jerrad Pierce <[email protected]>/<[email protected]> wrote the original code based on XML::Simple
Slaven Rezic <[email protected]> wrote the code using XML::LibXML::Reader
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.