File Coverage

blib/lib/PDF/API2/Resource/XObject/Image/GD.pm
Criterion Covered Total %
statement 18 49 36.7
branch 0 8 0.0
condition 0 9 0.0
subroutine 6 8 75.0
pod 1 2 50.0
total 25 76 32.8


line stmt bran cond sub pod time code
1             package PDF::API2::Resource::XObject::Image::GD;
2              
3 1     1   1176 use base 'PDF::API2::Resource::XObject::Image';
  1         2  
  1         131  
4              
5 1     1   7 use strict;
  1         2  
  1         28  
6 1     1   5 no warnings qw[ deprecated recursion uninitialized ];
  1         3  
  1         77  
7              
8             our $VERSION = '2.043'; # VERSION
9              
10 1     1   8 use PDF::API2::Util;
  1         2  
  1         165  
11 1     1   16 use PDF::API2::Basic::PDF::Utils;
  1         3  
  1         81  
12 1     1   6 use Scalar::Util qw(weaken);
  1         3  
  1         447  
13              
14             sub new {
15 0     0 1   my ($class,$pdf,$obj,$name,@opts) = @_;
16 0           my $self;
17              
18 0 0         $class = ref $class if ref $class;
19              
20 0   0       $self=$class->SUPER::new($pdf,$name|| 'Jx'.pdfkey());
21 0 0         $pdf->new_obj($self) unless($self->is_obj($pdf));
22              
23 0           $self->{' apipdf'}=$pdf;
24 0           weaken $self->{' apipdf'};
25              
26 0           $self->read_gd($obj,@opts);
27              
28 0           return($self);
29             }
30              
31             sub read_gd {
32 0     0 0   my $self = shift @_;
33 0           my $gd = shift @_;
34 0           my %opts = @_;
35              
36 0           my ($w,$h) = $gd->getBounds();
37 0           my $c = $gd->colorsTotal();
38              
39 0           $self->width($w);
40 0           $self->height($h);
41              
42 0           $self->bpc(8);
43 0           $self->colorspace('DeviceRGB');
44              
45 0 0 0       if($gd->can('jpeg') && ($c > 256) && !$opts{-lossless}) {
    0 0        
46              
47 0           $self->filters('DCTDecode');
48 0           $self->{' nofilt'}=1;
49 0           $self->{' stream'}=$gd->jpeg(75);
50              
51             } elsif($gd->can('raw')) {
52              
53 0           $self->filters('FlateDecode');
54 0           $self->{' stream'}=$gd->raw;
55              
56             } else {
57              
58 0           $self->filters('FlateDecode');
59 0           for(my $y=0;$y<$h;$y++) {
60 0           for(my $x=0;$x<$w;$x++) {
61 0           my $index=$gd->getPixel($x,$y);
62 0           my @rgb=$gd->rgb($index);
63 0           $self->{' stream'}.=pack('CCC',@rgb);
64             }
65             }
66              
67             }
68              
69 0           return($self);
70             }
71              
72             1;