Net-Flickr-Geo
view release on metacpan or search on metacpan
lib/Net/Flickr/Geo.pm view on Meta::CPAN
}
# This is not a love song...
$self->api_call({'method' => 'flickr.photos.setContentType',
'args' => {'photo_id' => $id, 'content_type' => 3}});
$self->log()->info("photo uploaded with ID $id");
return $id;
}
sub divine_option {
my $self = shift;
my $opt = shift;
my $default = shift;
my $v = $self->{'cfg'}->param($opt);
if (defined($v)){
$self->log()->info("divine by config : $opt => $v");
return $v;
}
$self->log()->info("divine by default : $opt => $default");
return $default;
}
sub load_pinwin {
my $self = shift;
if (! $self->{'__pinwin'}){
use Net::Flickr::Geo::Pinwin;
my $pinwin = Net::Flickr::Geo::Pinwin->mk_flickr_pinwin();
$self->log()->info("created temporary pinwin : $pinwin");
$self->{'__pinwin'} = $pinwin;
}
return $self->{'__pinwin'};
}
sub modify_map {
my $self = shift;
my $ph = shift;
my $map_data = shift;
my $thumb_data = shift;
my $out = shift;
$out ||= $self->mk_tempfile(".png");
my $pinwin = $self->load_pinwin();
#
my $truecolour = 1;
use GD;
my $pw = GD::Image->newFromPng($pinwin, $truecolour);
$pw->alphaBlending(0);
$pw->saveAlpha(1);
my $th = GD::Image->newFromJpeg($thumb_data->{'path'});
$th->alphaBlending(0);
$th->saveAlpha(1);
# place the thumb on the pinwin
$pw->copy($th, 11, 10, 0, 0, 75, 75);
#
# so so wrong but for the life of me I can't figure
# out why the transparency for the pinwin is not
# preserved below...
#
my $pin = $self->mk_tempfile(".png");
my $fh = FileHandle->new(">$pin");
binmode($fh);
$fh->print($pw->png(0));
$fh->close();
my $h = $self->divine_option("pinwin.map_height", 1024);
my $w = $self->divine_option("pinwin.map_width", 1024);
my $x = int($w / 2) - 28;
my $y = int($h / 2) - 134;
my $cmd = "composite -quality 100 -geometry +" . $x . "+" . $y . " $pin $map_data->{'path'} $out";
if (system($cmd)){
$self->log()->error("failed to modify map ($cmd) , $!");
return;
}
return $out;
#
# we now return you to your regular programming which doesn't work...
#
# place the pinwin on the map
my $map = GD::Image->newFromPng($map_data->{'path'}, $truecolour);
$map->alphaBlending(0);
$map->saveAlpha(1);
# fix me!
# why doesn't the alpha in $pw get preserved
$map->copy($pw, $x, $y, 0, 0, 159, 146);
#
$self->log()->info("save as $out");
my $f = FileHandle->new(">$out");
binmode($fh);
$f->print($map->png(0));
$f->close();
return $out;
}
sub ensure_geo_perms {
my $self = shift;
my $photo_id = shift;
my $require = shift;
if ($require eq "all"){
return 1;
}
#
my $key = "$photo_id-$require";
if (exists($self->{'__cache'}->{'geo_perms'}->{$key})){
return $self->{'__cache'}->{'geo_perms'}->{$key};
}
#
$self->log()->info("ensure geo permissions : $require");
my $perms = $self->api_call({'method' => 'flickr.photos.geo.getPerms', 'args' => {'photo_id' => $photo_id}});
my $ok = 0;
if ($require eq "public"){
$ok = $perms->findvalue("/rsp/perms/\@ispublic");
}
elsif ($require eq "contact"){
$ok = $perms->findvalue("/rsp/perms/\@iscontact");
}
elsif ($require eq "friend"){
$ok = $perms->findvalue("/rsp/perms/\@isfriend");
}
elsif ($require eq "family"){
$ok = $perms->findvalue("/rsp/perms/\@isfamily");
}
( run in 1.526 second using v1.01-cache-2.11-cpan-39bf76dae61 )