our
$VERSION
=
'3.026'
;
our
$LAST_UPDATE
=
'3.026'
;
Hide Show 33 lines of Pod
sub
new {
my
(
$class
,
$pdf
,
$obj
,
%opts
) =
@_
;
if
(
defined
$opts
{
'-name'
} && !
defined
$opts
{
'name'
}) {
$opts
{
'name'
} =
delete
(
$opts
{
'-name'
}); }
if
(
defined
$opts
{
'-compress'
} && !
defined
$opts
{
'compress'
}) {
$opts
{
'compress'
} =
delete
(
$opts
{
'-compress'
}); }
if
(
defined
$opts
{
'-lossless'
} && !
defined
$opts
{
'lossless'
}) {
$opts
{
'lossless'
} =
delete
(
$opts
{
'-lossless'
}); }
my
(
$name
,
$compress
);
if
(
exists
$opts
{
'name'
}) {
$name
=
$opts
{
'name'
}; }
my
$self
;
$class
=
ref
(
$class
)
if
ref
(
$class
);
$self
=
$class
->SUPER::new(
$pdf
,
$name
||
'Dx'
.pdfkey());
$pdf
->new_obj(
$self
)
unless
$self
->is_obj(
$pdf
);
$self
->{
' apipdf'
} =
$pdf
;
weaken
$self
->{
' apipdf'
};
$self
->read_gd(
$obj
,
%opts
);
return
$self
;
}
sub
read_gd {
my
(
$self
,
$gd
,
%opts
) =
@_
;
my
(
$w
,
$h
) =
$gd
->getBounds();
my
$c
=
$gd
->colorsTotal();
$self
->width(
$w
);
$self
->height(
$h
);
$self
->bits_per_component(8);
$self
->colorspace(
'DeviceRGB'
);
if
(
$gd
->can(
'jpeg'
) && (
$c
> 256) && !
$opts
{
'lossless'
}) {
$self
->filters(
'DCTDecode'
);
$self
->{
' nofilt'
} = 1;
$self
->{
' stream'
} =
$gd
->jpeg(75);
}
elsif
(
$gd
->can(
'raw'
)) {
$self
->filters(
'FlateDecode'
);
$self
->{
' stream'
} =
$gd
->raw();
}
else
{
$self
->filters(
'FlateDecode'
);
for
(
my
$y
=0;
$y
<
$h
;
$y
++) {
for
(
my
$x
=0;
$x
<
$w
;
$x
++) {
my
$index
=
$gd
->getPixel(
$x
,
$y
);
my
@rgb
=
$gd
->rgb(
$index
);
$self
->{
' stream'
} .=
pack
(
'CCC'
,
@rgb
);
}
}
}
return
$self
;
}
1;