Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Perl: Kirjasto GD::FullRotate

pistemies [28.02.2018 16:50:32]

#

Tällä kirjastolla voi kääntää kuvaa vapaasti annetun asteen verran ja asettaa halutessaan kuvan taustavärin läpinäkyväksi.Läpinäkyvyyden käyttäminen edeyttää png-kuvan käyttöä.

Ohje

Syötettävät argumentit
src_dst, src_width, src_height, angle, transparent, @color

Käyttö
Kirjastolle syötetään kuvan koko, käännösaste, läpinäkyvyys (vaihtoehdot: 0 = Ei, 1 = Kyllä), taustaväri syötetään @-taulukossa esim. muodossa @color = (255,255,255)

Koodi

package GD::FullRotate;
use strict;
use CGI::Carp qw(fatalsToBrowser);
use GD;
use GD::Image;
use Math::Trig;
use vars '$VERSION';
$VERSION = '1.00';

sub new {
  my ($self,$src,$width,$height,$angle,$transparent,@color) = @_;
  my ($w2,$h2,$color);
  my $lim_angle = $angle <= 180 ? $angle : ($angle - 180);
  if($angle <= 90){
    $w2 = $width * cos(deg2rad($lim_angle)) + $height * sin(deg2rad($lim_angle));
    $h2 = $width * sin(deg2rad($lim_angle)) + $height * cos(deg2rad($lim_angle));
  } else {
    $w2 = $width * sin(deg2rad($lim_angle-90)) + $height * cos(deg2rad($lim_angle-90));
    $h2 = $width * cos(deg2rad($lim_angle-90)) + $height * sin(deg2rad($lim_angle-90));
  }

   $self = new GD::Image($w2,$h2);
   my $x = $w2/2;
   my $y = $h2/2;

   my $background  = $self->colorAllocate($color[0], $color[1], $color[2]);


   if($transparent > 0){
     $self->transparent($background);
   }
   $self->copyRotated($src,$x,$y,0,0,$width,$height,$angle);
  return $self;
}
__END__

=head COPYRIGHT

 Author: Pekka Mansikka, Kittilä, Finland

==head2 SYNOPSIS

Example:
--------
use GD;
use CGI::Carp qw(fatalsToBrowser);
use GD::FullRotate;
print "Content-type:text/html\n\n";

my $src =  newFromPng GD::Image("niitty.png");
my ($width,$height) = $src->getBounds();
my $angle = 132;
my @color = (255,255,255);
my $transparent = 1;
my $image = new GD::FullRotate($src,$width,$height,$angle,$transparent,@color);

my $file = "testit.png";
open OUT, '>:raw', $file or die $!;
print OUT $image->png;
close OUT;

system $file;

Fullrotate arguments: src_dst, src_width, src_height, angle, transpernt, @color
This angle is 1-359, transparent is 0 (false) or 1 (true), color in array @color.

==cut

Metabolix [28.02.2018 17:01:15]

#

Miten olisi valmis funktio copyRotateInterpolated? Tulee parempaa jälkeäkin, kun käytetään interpolaatiota.

pistemies [28.02.2018 18:11:39]

#

Metabolix kirjoitti:

Miten olisi valmis funktio copyRotateInterpolated? Tulee parempaa jälkeäkin, kun käytetään interpolaatiota.

Kiitos viestistä, en ole tutustunut tuohon. Pitää jossakin vaiheessa katsoa. Olen tässä kirjaston ulkoasun sijaan kiinnittänyt huomiota siihen, että kirjaston käyttäminen olisi yksinkertaisempaa, sille syötettäviä argumentteja olisi mahdollisimman vähän.

pistemies [28.02.2018 20:46:49]

#

Metabolix kirjoitti:

Miten olisi valmis funktio copyRotateInterpolated? Tulee parempaa jälkeäkin, kun käytetään interpolaatiota.

Tuolle funktiolle ei netistä juurikaan löydy minkäänlaista ohjetta. Tämä kirjasto on sitä parempi, mikäli sen ohjeen löytyminen on kiven alla (olihan tässä toki Grey apuna).

Ps, Voisiko joku, joka on tuota copyRotateInterpolated funktiota käyttänyt, kertoa millainen on sen toiminta pl-sivulla? Minua ei siis kiinnosta, miltä sen pm-tiedosto näyttää, vaan se, miten hyvin se käytännössä toimii. Voiko sillä kääntää vinottain ja pienentääkö se alkuperäistä kuvaa vinottain käännettäessä vai säilyttääkö alkuperäisen koon, jolloin kuvaan mitat ovat suuremmat?

Ps. Nyt alkaa hiukan selviämään. Perl paketin mukana tuli GD.pm versio 2.66, kyseinen funktio on vasta versioss 2.66.4. Lataampa uudemman version ja katsotaan.
Ps. Noh niin. Eipä tuo version 2.68 toimi tämän muun perlin kanssa, tulee virheitä Dynaloader.pm tiedostoon...hohohoijaa.
/* Mikäli joskus tuota testaan, niin se jäänee aikaan, kun perl asennuspaketti on päivitetty niin, settä se on käytössä */

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta