Created
July 3, 2017 21:04
-
-
Save jef-sure/b728dc623907eaff0bdf4089dfaa508d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| sub vk_api_init { | |
| my $self = shift; | |
| my $token = $self->db->selectrow_hashref( | |
| "SELECT access_token,uid FROM clients_social WHERE client_id = ? and network = ?", | |
| {Slice => {}}, | |
| $self->current_user->{id}, 'vkontakte' | |
| ); | |
| $self->{vk_token} = $token; | |
| my $api_point = "https://api.vk.com/method/"; | |
| return sub { | |
| my ($http_method, $api_method, $params) = @_; | |
| my @form = $http_method eq 'post' && $params && %$params ? (form => $params) : (); | |
| my $get = $http_method eq 'get' && $params && %$params ? '&' . join('&', map {"$_=$params->{$_}"} keys %$params) : ''; | |
| return $self->ua->$http_method($api_point . $api_method . "?access_token=" . $token->{access_token} . $get, @form) | |
| ->res->json; | |
| }; | |
| } | |
| sub avatar { | |
| my $self = shift; | |
| my $upload_dir = $self->app->static->paths->[0] . '/upload/avatar/'; | |
| my $vk_api = $self->vk_api_init; | |
| if ($self->param('set_avatar')) { | |
| my $upload = $vk_api->(get => 'photos.getProfileUploadServer'); | |
| my $uploaded = $self->ua->post($upload->{response}{upload_url}, | |
| form => {photo => {file => $upload_dir . $self->param('set_avatar')}})->res->json; | |
| my $set = $vk_api->( | |
| post => 'photos.saveProfilePhoto', | |
| { hash => $uploaded->{hash}, | |
| photo => $uploaded->{photo}, | |
| server => $uploaded->{server}, | |
| } | |
| ); | |
| $self->session('avatar' => '/upload/avatar/' . $self->param('set_avatar')); | |
| $self->session('photo_hash' => $set->{response}{photo_hash}); | |
| $self->redirect_to('https://vk.com/app6098634'); | |
| } | |
| my $data = $vk_api->( | |
| get => 'users.get', | |
| {uids => $self->{vk_token}{uid}, fields => 'photo_max_orig'} | |
| ); | |
| my $user_image = Mojo::File->new($data->{response}[0]{photo_max_orig}); | |
| unless (-e $upload_dir . $user_image->basename) { | |
| $self->ua->max_redirects(5)->get($data->{response}[0]{photo_max_orig}) | |
| ->result->content->asset->move_to($upload_dir . $user_image->basename); | |
| } | |
| use Image::Magick; | |
| my @mask = ('avatar1', 'avatar2'); | |
| my @images; | |
| for my $mask (@mask) { | |
| my $image = new Image::Magick; | |
| $image->Read($upload_dir . $user_image->basename); | |
| my $mark_up = Image::Magick->new; | |
| $mark_up->Read($upload_dir . 'mask/' . $mask . '_up.png'); | |
| $mark_up->Resize(geometry => '400x400!'); | |
| $image->Composite(image => $mark_up, qw(compose SrcAtop gravity North)); | |
| my $mark_down = Image::Magick->new; | |
| $mark_down->Read($upload_dir . 'mask/' . $mask . '_bottom.png'); | |
| $mark_down->Resize(geometry => '400x400!'); | |
| $image->Composite(image => $mark_down, qw(compose SrcAtop gravity South)); | |
| my $avatar = Mojo::File->new($upload_dir . md5_sum($user_image->basename . $mask) . '.jpg'); | |
| my $x = $image->Write($avatar->path); | |
| warn "$x" if "$x"; | |
| push @images, $avatar->basename; | |
| } | |
| return $self->respond_to( | |
| html => { | |
| template => 'user/avatar', | |
| images => \@images, | |
| }, | |
| ); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment