+sub preload {
+ # this serves two purposes:
+ # - a class method to load the file support modules included with Imager
+ # (or were included, once the library dependent modules are split out)
+ # - something for Module::ScanDeps to analyze
+ # https://rt.cpan.org/Ticket/Display.html?id=6566
+ local $@;
+ eval { require Imager::File::GIF };
+ eval { require Imager::File::JPEG };
+ eval { require Imager::File::PNG };
+ eval { require Imager::File::SGI };
+ eval { require Imager::File::TIFF };
+ eval { require Imager::File::ICO };
+ eval { require Imager::Font::W32 };
+ eval { require Imager::Font::FT2 };
+ eval { require Imager::Font::T1 };
+}
+
+package Imager::IO;
+use IO::Seekable;
+
+sub new_fh {
+ my ($class, $fh) = @_;
+
+ if (tied(*$fh)) {
+ return $class->new_cb
+ (
+ sub {
+ local $\;
+
+ return print $fh $_[0];
+ },
+ sub {
+ my $tmp;
+ my $count = CORE::read $fh, $tmp, $_[1];
+ defined $count
+ or return undef;
+ $count
+ or return "";
+ return $tmp;
+ },
+ sub {
+ if ($_[1] != SEEK_CUR || $_[0] != 0) {
+ unless (CORE::seek $fh, $_[0], $_[1]) {
+ return -1;
+ }
+ }
+
+ return tell $fh;
+ },
+ undef,
+ );
+ }
+ else {
+ return $class->_new_perlio($fh);
+ }
+}
+