403Webshell
Server IP : 103.119.228.120  /  Your IP : 3.145.58.90
Web Server : Apache
System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64
User : nobody ( 99)
PHP Version : 5.6.40
Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime
MySQL : ON |  cURL : ON |  WGET : ON |  Perl : ON |  Python : ON |  Sudo : ON |  Pkexec : ON
Directory :  /usr/local/share/man/man3/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /usr/local/share/man/man3/Image::Size.3pm
.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
.    ds C`
.    ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{
.    if \nF \{
.        de IX
.        tm Index:\\$1\t\\n%\t"\\$2"
..
.        if !\nF==2 \{
.            nr % 0
.            nr F 2
.        \}
.    \}
.\}
.rr rF
.\" ========================================================================
.\"
.IX Title "Image::Size 3"
.TH Image::Size 3 "2015-03-01" "perl v5.16.3" "User Contributed Perl Documentation"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
Image::Size \- read the dimensions of an image in several popular formats
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 4
\&    use Image::Size;
\&    # Get the size of globe.gif
\&    ($globe_x, $globe_y) = imgsize("globe.gif");
\&    # Assume X=60 and Y=40 for remaining examples
\&
\&    use Image::Size \*(Aqhtml_imgsize\*(Aq;
\&    # Get the size as \*(Aqwidth="X" height="Y"\*(Aq for HTML generation
\&    $size = html_imgsize("globe.gif");
\&    # $size == \*(Aqwidth="60" height="40"\*(Aq
\&
\&    use Image::Size \*(Aqattr_imgsize\*(Aq;
\&    # Get the size as a list passable to routines in CGI.pm
\&    @attrs = attr_imgsize("globe.gif");
\&    # @attrs == (\*(Aq\-width\*(Aq, 60, \*(Aq\-height\*(Aq, 40)
\&
\&    use Image::Size;
\&    # Get the size of an in\-memory buffer
\&    ($buf_x, $buf_y) = imgsize(\e$buf);
\&    # Assuming that $buf was the data, imgsize() needed a
\&    $ reference to a scalar
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
The \fBImage::Size\fR library is based upon the \f(CW\*(C`wwwis\*(C'\fR script written by
Alex Knowles \fI(alex@ed.ac.uk)\fR, a tool to examine \s-1HTML\s0 and add 'width' and
\&'height' parameters to image tags. The sizes are cached internally based on
file name, so multiple calls on the same file name (such as images used
in bulleted lists, for example) do not result in repeated computations.
.SH "SUBROUTINES/METHODS"
.IX Header "SUBROUTINES/METHODS"
\&\fBImage::Size\fR provides three interfaces for possible import:
.IP "imgsize(\fIstream\fR)" 4
.IX Item "imgsize(stream)"
Returns a three-item list of the X and Y dimensions (width and height, in
that order) and image type of \fIstream\fR. Errors are noted by undefined
(\fBundef\fR) values for the first two elements, and an error string in the third.
The third element can be (and usually is) ignored, but is useful when
sizing data whose type is unknown.
.IP "html_imgsize(\fIstream\fR)" 4
.IX Item "html_imgsize(stream)"
Returns the width and height (X and Y) of \fIstream\fR pre-formatted as a single
string \f(CW\*(Aqwidth="X" height="Y"\*(Aq\fR suitable for addition into generated \s-1HTML IMG\s0
tags. If the underlying call to \f(CW\*(C`imgsize\*(C'\fR fails, \fBundef\fR is returned. The
format returned is dually suited to both \s-1HTML\s0 and \s-1XHTML.\s0
.IP "attr_imgsize(\fIstream\fR)" 4
.IX Item "attr_imgsize(stream)"
Returns the width and height of \fIstream\fR as part of a 4\-element list useful
for routines that use hash tables for the manipulation of named parameters,
such as the Tk or \s-1CGI\s0 libraries. A typical return value looks like
\&\f(CW\*(C`("\-width", X, "\-height", Y)\*(C'\fR. If the underlying call to \f(CW\*(C`imgsize\*(C'\fR fails,
\&\fBundef\fR is returned.
.PP
By default, only \f(CW\*(C`imgsize()\*(C'\fR is exported. Any one or combination of the three
may be explicitly imported, or all three may be with the tag \fB:all\fR.
.SS "Input Types"
.IX Subsection "Input Types"
The sort of data passed as \fIstream\fR can be one of three forms:
.IP "string" 4
.IX Item "string"
If an ordinary scalar (string) is passed, it is assumed to be a file name
(either absolute or relative to the current working directory of the
process) and is searched for and opened (if found) as the source of data.
Possible error messages (see \s-1DIAGNOSTICS\s0 below) may include file-access
problems.
.IP "scalar reference" 4
.IX Item "scalar reference"
If the passed-in stream is a scalar reference, it is interpreted as pointing
to an in-memory buffer containing the image data.
.Sp
.Vb 4
\&        # Assume that &read_data gets data somewhere (WWW, etc.)
\&        $img = &read_data;
\&        ($x, $y, $id) = imgsize(\e$img);
\&        # $x and $y are dimensions, $id is the type of the image
.Ve
.IP "Open file handle" 4
.IX Item "Open file handle"
The third option is to pass in an open filehandle (such as an object of
the \f(CW\*(C`IO::File\*(C'\fR class, for example) that has already been associated with
the target image file. The file pointer will necessarily move, but will be
restored to its original position before subroutine end.
.Sp
.Vb 3
\&        # $fh was passed in, is IO::File reference:
\&        ($x, $y, $id) = imgsize($fh);
\&        # Same as calling with filename, but more abstract.
.Ve
.SS "Recognized Formats"
.IX Subsection "Recognized Formats"
Image::Size natively understands and sizes data in the following formats:
.IP "\s-1GIF\s0" 4
.IX Item "GIF"
.PD 0
.IP "\s-1JPG\s0" 4
.IX Item "JPG"
.IP "\s-1XBM\s0" 4
.IX Item "XBM"
.IP "\s-1XPM\s0" 4
.IX Item "XPM"
.IP "\s-1PPM\s0 family (\s-1PPM/PGM/PBM\s0)" 4
.IX Item "PPM family (PPM/PGM/PBM)"
.IP "\s-1XV\s0 thumbnails" 4
.IX Item "XV thumbnails"
.IP "\s-1PNG\s0" 4
.IX Item "PNG"
.IP "\s-1MNG\s0" 4
.IX Item "MNG"
.IP "\s-1TIF\s0" 4
.IX Item "TIF"
.IP "\s-1BMP\s0" 4
.IX Item "BMP"
.IP "\s-1PSD \s0(Adobe PhotoShop)" 4
.IX Item "PSD (Adobe PhotoShop)"
.IP "\s-1SWF \s0(ShockWave/Flash)" 4
.IX Item "SWF (ShockWave/Flash)"
.IP "\s-1CWS \s0(FlashMX, compressed \s-1SWF,\s0 Flash 6)" 4
.IX Item "CWS (FlashMX, compressed SWF, Flash 6)"
.IP "\s-1PCD \s0(Kodak PhotoCD, see notes below)" 4
.IX Item "PCD (Kodak PhotoCD, see notes below)"
.IP "\s-1EMF \s0(Windows Enhanced Metafile Format)" 4
.IX Item "EMF (Windows Enhanced Metafile Format)"
.IP "\s-1WEBP\s0" 4
.IX Item "WEBP"
.IP "\s-1ICO \s0(Microsoft icon format)" 4
.IX Item "ICO (Microsoft icon format)"
.IP "\s-1CUR \s0(Microsoft mouse cursor format)" 4
.IX Item "CUR (Microsoft mouse cursor format)"
.PD
.PP
Additionally, if the \fBImage::Magick\fR module is present, the file types
supported by it are also supported by Image::Size.  See also \*(L"\s-1CAVEATS\*(R"\s0.
.PP
When using the \f(CW\*(C`imgsize\*(C'\fR interface, there is a third, unused value returned
if the programmer wishes to save and examine it. This value is the identity of
the data type, expressed as a 2\-3 letter abbreviation as listed above. This is
useful when operating on open file handles or in-memory data, where the type
is as unknown as the size.  The two support routines ignore this third return
value, so those wishing to use it must use the base \f(CW\*(C`imgsize\*(C'\fR routine.
.PP
Note that when the \fBImage::Magick\fR fallback is used (for all non-natively
supported files), the data type identity comes directly from the 'format'
parameter reported by \fBImage::Magick\fR, so it may not meet the 2\-3 letter
abbreviation format.  For example, a \s-1WBMP\s0 file might be reported as
\&'Wireless Bitmap (level 0) image' in this case.
.ie n .SS "Information Caching and $NO_CACHE"
.el .SS "Information Caching and \f(CW$NO_CACHE\fP"
.IX Subsection "Information Caching and $NO_CACHE"
When a filename is passed to any of the sizing routines, the default behavior
of the library is to cache the resulting information. The modification-time of
the file is also recorded, to determine whether the cache should be purged and
updated. This was originally added due to the fact that a number of \s-1CGI\s0
applications were using this library to generate attributes for pages that
often used the same graphical element many times over.
.PP
However, the caching can lead to problems when the files are generated
dynamically, at a rate that exceeds the resolution of the modification-time
value on the filesystem. Thus, the optionally-importable control variable
\&\f(CW$NO_CACHE\fR has been introduced. If this value is anything that evaluates to a
non-false value (be that the value 1, any non-null string, etc.) then the
cacheing is disabled until such time as the program re-enables it by setting
the value to false.
.PP
The parameter \f(CW$NO_CACHE\fR may be imported as with the \fBimgsize\fR routine, and
is also imported when using the import tag \fB\f(CB\*(C`:all\*(C'\fB\fR. If the programmer
chooses not to import it, it is still accessible by the fully-qualified package
name, \fB\f(CB$Image::Size::NO_CACHE\fB\fR.
.SS "Sharing the Cache Between Processes"
.IX Subsection "Sharing the Cache Between Processes"
If you are using \fBImage::Size\fR in a multi-thread or multi-process environment,
you may wish to enable sharing of the cached information between the
processes (or threads). Image::Size does not natively provide any facility
for this, as it would add to the list of dependencies.
.PP
To make it possible for users to do this themselves, the \f(CW%CACHE\fR hash-table
that \fBImage::Size\fR uses internally for storage may be imported in the \fBuse\fR
statement. The user may then make use of packages such as \fB\s-1IPC::MMA\s0\fR
(\s-1IPC::MMA\s0) that can \f(CW\*(C`tie\*(C'\fR a hash to a shared-memory segment:
.PP
.Vb 2
\&    use Image::Size qw(imgsize %CACHE);
\&    use IPC::MMA;
\&
\&    ...
\&
\&    tie %CACHE, \*(AqIPC::MM::Hash\*(Aq, $mmHash; # $mmHash via mm_make_hash
\&    # Now, forked processes will share any changes made to the cache
.Ve
.SS "Sizing PhotoCD Images"
.IX Subsection "Sizing PhotoCD Images"
With version 2.95, support for the Kodak PhotoCD image format is
included. However, these image files are not quite like the others. One file
is the source of the image in any of a range of pre-set resolutions (all with
the same aspect ratio). Supporting this here is tricky, since there is nothing
inherent in the file to limit it to a specific resolution.
.PP
The library addresses this by using a scale mapping, and requiring the user
(you) to specify which scale is preferred for return. Like the \f(CW$NO_CACHE\fR
setting described earlier, this is an importable scalar variable that may be
used within the application that uses \fBImage::Size\fR. This parameter is called
\&\f(CW$PCD_SCALE\fR, and is imported by the same name. It, too, is also imported
when using the tag \fB\f(CB\*(C`:all\*(C'\fB\fR or may be referenced as
\&\fB\f(CB$Image::Size::PCD_SCALE\fB\fR.
.PP
The parameter should be set to one of the following values:
.PP
.Vb 6
\&        base/16
\&        base/4
\&        base
\&        base4
\&        base16
\&        base64
.Ve
.PP
Note that not all PhotoCD disks will have included the \f(CW\*(C`base64\*(C'\fR
resolution. The actual resolutions are not listed here, as they are constant
and can be found in any documentation on the \s-1PCD\s0 format. The value of
\&\f(CW$PCD_SCALE\fR is treated in a case-insensitive manner, so \f(CW\*(C`base\*(C'\fR is the same
as \f(CW\*(C`Base\*(C'\fR or \f(CW\*(C`BaSe\*(C'\fR. The default scale is set to \f(CW\*(C`base\*(C'\fR.
.PP
Also note that the library makes no effort to read enough of the \s-1PCD\s0 file to
verify that the requested resolution is available. The point of this library
is to read as little as necessary so as to operate efficiently. Thus, the only
real difference to be found is in whether the orientation of the image is
portrait or landscape. That is in fact all that the library extracts from the
image file.
.SS "Controlling Behavior with \s-1GIF\s0 Images"
.IX Subsection "Controlling Behavior with GIF Images"
\&\s-1GIF\s0 images present a sort of unusual situation when it comes to reading size.
Because GIFs can be a series of sub-images to be played as an animated
sequence, what part does the user want to get the size for?
.PP
When dealing with \s-1GIF\s0 files, the user may control the behavior by setting the
global value \fB\f(CB$Image::Size::GIF_BEHAVIOR\fB\fR. Like the \s-1PCD\s0 setting, this may
be imported when loading the library. Three values are recognized by the
GIF-handling code:
.IP "0" 4
This is the default value. When this value is chosen, the returned dimensions
are those of the \*(L"screen\*(R". The \*(L"screen\*(R" is the display area that the \s-1GIF\s0
declares in the first data block of the file. No sub-images will be greater
than this in size; if they are, the specification dictates that they be
cropped to fit within the box.
.Sp
This is also the fastest method for sizing the \s-1GIF,\s0 as it reads the least
amount of data from the image stream.
.IP "1" 4
.IX Item "1"
If this value is set, then the size of the first sub-image within the \s-1GIF\s0 is
returned. For plain (non-animated) \s-1GIF\s0 files, this would be the same as the
screen (though it doesn't have to be, strictly-speaking).
.Sp
When the first image descriptor block is read, the code immediately returns,
making this only slightly-less efficient than the previous setting.
.IP "2" 4
.IX Item "2"
If this value is chosen, then the code loops through all the sub-images of the
animated \s-1GIF,\s0 and returns the dimensions of the largest of them.
.Sp
This option requires that the full \s-1GIF\s0 image be read, in order to ensure that
the largest is found.
.PP
Any value outside this range will produce an error in the \s-1GIF\s0 code before any
image data is read.
.PP
The value of dimensions other than the view-port (\*(L"screen\*(R") is dubious.
However, some users have asked for that functionality.
.SH "Image::Size AND WEBSERVERS"
.IX Header "Image::Size AND WEBSERVERS"
There are a few approaches to getting the most out of \fBImage::Size\fR in a
multi-process webserver environment. The two most common are pre-caching and
using shared memory. These examples are focused on Apache, but should be
adaptable to other server approaches as well.
.SS "Pre-Caching Image Data"
.IX Subsection "Pre-Caching Image Data"
One approach is to include code in an Apache start-up script that reads the
information on all images ahead of time. A script loaded via \f(CW\*(C`PerlRequire\*(C'\fR,
for example, becomes part of the server memory before child processes are
created. When the children are created, they come into existence with a
pre-primed cache already available.
.PP
The shortcoming of this approach is that you have to plan ahead of time for
which image files you need to cache. Also, if the list is long-enough it
can slow server start-up time.
.PP
The advantage is that it keeps the information centralized in one place and
thus easier to manage and maintain. It also requires no additional \s-1CPAN\s0
modules.
.SS "Shared Memory Caching"
.IX Subsection "Shared Memory Caching"
Another approach is to introduce a shared memory segment that the individual
processes all have access to. This can be done with any of a variety of
shared memory modules on \s-1CPAN.\s0
.PP
Probably the easiest way to do this is to use one of the packages that allow
the tying of a hash to a shared memory segment. You can use this in
combination with importing the hash table variable that is used by
\&\fBImage::Size\fR for the cache, or you can refer to it explicitly by full
package name:
.PP
.Vb 2
\&    use IPC::Shareable;
\&    use Image::Size;
\&
\&    tie %Image::Size::CACHE, \*(AqIPC::Shareable\*(Aq, \*(Aqsize\*(Aq, { create => 1 };
.Ve
.PP
That example uses \fBIPC::Shareable\fR (see IPC::Shareable) and
uses the option to the \f(CW\*(C`tie\*(C'\fR command that tells \fBIPC::Shareable\fR to create
the segment. Once the initial server process starts to create children, they
will all share the tied handle to the memory segment.
.PP
Another package that provides this capability is \fB\s-1IPC::MMA\s0\fR (see
\&\s-1IPC::MMA\s0), which provides shared memory management via the \fImm\fR
library from Ralf Engelschall (details available in the documentation for
\&\fB\s-1IPC::MMA\s0\fR):
.PP
.Vb 2
\&    use IPC::MMA;
\&    use Image::Size qw(%CACHE);
\&
\&    my $mm = mm_create(65536, \*(Aq/tmp/test_lockfile\*(Aq);
\&    my $mmHash = mm_make_hash($mm);
\&    tie %CACHE, \*(AqIPC::MM::Hash\*(Aq, $mmHash;
.Ve
.PP
As before, this is done in the start-up phase of the webserver. As the
child processes are created, they inherit the pointer to the existing shared
segment.
.SH "MORE EXAMPLES"
.IX Header "MORE EXAMPLES"
The \fBattr_imgsize\fR interface is also well-suited to use with the Tk
extension:
.PP
.Vb 1
\&    $image = $widget\->Photo(\-file => $img_path, attr_imgsize($img_path));
.Ve
.PP
Since the \f(CW\*(C`Tk::Image\*(C'\fR classes use dashed option names as \f(CW\*(C`CGI\*(C'\fR does, no
further translation is needed.
.PP
This package is also well-suited for use within an Apache web server context.
File sizes are cached upon read (with a check against the modified time of
the file, in case of changes), a useful feature for a \fBmod_perl\fR environment
in which a child process endures beyond the lifetime of a single request.
Other aspects of the \fBmod_perl\fR environment cooperate nicely with this
module, such as the ability to use a sub-request to fetch the full pathname
for a file within the server space. This complements the \s-1HTML\s0 generation
capabilities of the \fB\s-1CGI\s0\fR module, in which \f(CW\*(C`CGI::img\*(C'\fR wants a \s-1URL\s0 but
\&\f(CW\*(C`attr_imgsize\*(C'\fR needs a file path:
.PP
.Vb 4
\&    # Assume $Q is an object of class CGI, $r is an Apache request object.
\&    # $imgpath is a URL for something like "/img/redball.gif".
\&    $r\->print($Q\->img({ \-src => $imgpath,
\&                        attr_imgsize($r\->lookup_uri($imgpath)\->filename) }));
.Ve
.PP
The advantage here, besides not having to hard-code the server document root,
is that Apache passes the sub-request through the usual request lifecycle,
including any stages that would re-write the \s-1URL\s0 or otherwise modify it.
.SH "DIAGNOSTICS"
.IX Header "DIAGNOSTICS"
The base routine, \f(CW\*(C`imgsize\*(C'\fR, returns \fBundef\fR as the first value in its list
when an error has occurred. The third element contains a descriptive
error message.
.PP
The other two routines simply return \fBundef\fR in the case of error.
.SH "CAVEATS"
.IX Header "CAVEATS"
Caching of size data can only be done on inputs that are file names. Open
file handles and scalar references cannot be reliably transformed into a
unique key for the table of cache data. Buffers could be cached using the
\&\s-1MD5\s0 module, and perhaps in the future I will make that an option. I do not,
however, wish to lengthen the dependency list by another item at this time.
.PP
As \fBImage::Magick\fR operates on file names, not handles, the use of it is
restricted to cases where the input to \f(CW\*(C`imgsize\*(C'\fR is provided as file name.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
Image::Magick and Image::Info Perl modules at
\&\s-1CPAN.\s0 The \fBGraphics::Magick\fR Perl \s-1API\s0 at
<http://www.graphicsmagick.org/perl.html>.
.SH "CONTRIBUTORS"
.IX Header "CONTRIBUTORS"
Perl module interface by Randy J. Ray \fI(rjray@blackperl.com)\fR, original
image-sizing code by Alex Knowles \fI(alex@ed.ac.uk)\fR and Andrew Tong
\&\fI(werdna@ugcs.caltech.edu)\fR, used with their joint permission.
.PP
Some bug fixes submitted by Bernd Leibing \fI(bernd.leibing@rz.uni\-ulm.de)\fR.
\&\s-1PPM/PGM/PBM\s0 sizing code contributed by Carsten Dominik
\&\fI(dominik@strw.LeidenUniv.nl)\fR. Tom Metro \fI(tmetro@vl.com)\fR re-wrote the \s-1JPG\s0
and \s-1PNG\s0 code, and also provided a \s-1PNG\s0 image for the test suite. Dan Klein
\&\fI(dvk@lonewolf.com)\fR contributed a re-write of the \s-1GIF\s0 code.  Cloyce Spradling
\&\fI(cloyce@headgear.org)\fR contributed \s-1TIFF\s0 sizing code and test images. Aldo
Calpini \fI(a.calpini@romagiubileo.it)\fR suggested support of \s-1BMP\s0 images (which
I \fIreally\fR should have already thought of :\-) and provided code to work
with. A patch to allow html_imgsize to produce valid output for \s-1XHTML,\s0 as
well as some documentation fixes was provided by Charles Levert
\&\fI(charles@comm.polymtl.ca)\fR. The ShockWave/Flash support was provided by
Dmitry Dorofeev \fI(dima@yasp.com)\fR. Though I neglected to take note of who
supplied the \s-1PSD \s0(PhotoShop) code, a bug was identified by Alex Weslowski
<aweslowski@rpinteractive.com>, who also provided a test image. \s-1PCD\s0 support
was adapted from a script made available by Phil Greenspun, as guided to my
attention by Matt Mueller \fImueller@wetafx.co.nz\fR. A thorough read of the
documentation and source by Philip Newton \fIPhilip.Newton@datenrevision.de\fR
found several typos and a small buglet. Ville Skytt� \fI(ville.skytta@iki.fi)\fR
provided the \s-1MNG\s0 and the Image::Magick fallback code. Craig MacKenna
\&\fI(mackenna@animalhead.com)\fR suggested making the cache available so that it
could be used with shared memory, and helped test my change before release.
.SH "BUGS"
.IX Header "BUGS"
Please report any bugs or feature requests to
\&\f(CW\*(C`bug\-image\-size at rt.cpan.org\*(C'\fR, or through the web interface at
<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Image\-Size>. I will be
notified, and then you'll automatically be notified of progress on
your bug as I make changes.
.SH "SUPPORT"
.IX Header "SUPPORT"
.IP "\(bu" 4
\&\s-1RT: CPAN\s0's request tracker
.Sp
<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Image\-Size>
.IP "\(bu" 4
AnnoCPAN: Annotated \s-1CPAN\s0 documentation
.Sp
<http://annocpan.org/dist/Image\-Size>
.IP "\(bu" 4
\&\s-1CPAN\s0 Ratings
.Sp
<http://cpanratings.perl.org/d/Image\-Size>
.IP "\(bu" 4
Search \s-1CPAN\s0
.Sp
<http://search.cpan.org/dist/Image\-Size>
.IP "\(bu" 4
Project page on GitHub
.Sp
<http://github.com/rjray/image\-size>
.SH "REPOSITORY"
.IX Header "REPOSITORY"
<https://github.com/rjray/image\-size>
.SH "LICENSE AND COPYRIGHT"
.IX Header "LICENSE AND COPYRIGHT"
This file and the code within are copyright (c) 1996\-2009 by Randy J. Ray.
.PP
Copying and distribution are permitted under the terms of the Artistic
License 2.0 (<http://www.opensource.org/licenses/artistic\-license\-2.0.php>) or
the \s-1GNU LGPL 2.1 \s0(<http://www.opensource.org/licenses/lgpl\-2.1.php>).
.SH "AUTHOR"
.IX Header "AUTHOR"
Randy J. Ray \f(CW\*(C`<rjray@blackperl.com>\*(C'\fR

Youez - 2016 - github.com/yon3zu
LinuXploit