Autorius Tema: [Klausimas] php foto filtrai  (Skaityta 339 kartus)

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 962
  • Karma: +41/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
[Klausimas] php foto filtrai
« Įrašytas: 2013-02-19 07:22:22 am »
Sveiki, ar esat kas domejesi nutrauku filtrais su php? Zinau, kad yra ne vienas budas, bet konkreciai noriu suzinot apie si, kuris man ne velnio neveikia. Kodel apie si? Todel kad gal but sitas budas funkcionalesnis? Tai ir noriu suzinoti. Radau dokumentacija internete, bet niekur nerandu placiau. Gal kas suprantat kas cia vyksta, nes man tai kazkodel sugeneruoja tokia pacia nuotrauka(nepakitusia). Galvojau kad nuotrauka bet kokia netinka, bet isbandziau as ju begale ir vistiek nieko nepakito.

Taigi pasakoju. Idedu tik esme.
<?php

$instagraph 
= new Instagraph;
$instagraph->setInput($filepath);   //Kelias iki norimos nuotraukos
$instagraph->setOutput($output);   //Kelias iki busimos nuotraukos
$instagraph->process($_GET['filter']);  //vyksta procesas kurio metu sukriamas tmp failas jam priskiriamas jpg nuotraukos turinys ir jis redaguojamas. Tada redaguotas tmp issaugomas kaip naujas jpg
?>


ir klase:
<?php

class Instagraph
{

  public 
$_input null;
  public 
$_output null;
  public 
$_prefix 'IMG';
  private 
$_width null;
  private 
$_height null;
  private 
$_tmp null;
  
  public function 
setInput($path)
  {
    if (
file_exists($path))
    {
      
$this->_input $path;
      list(
$this->_width$this->_height) = getimagesize($path);
      if(
$this->_width 720)
      {
        
$this->resize(720480);
      }
      return 
true;
    }
    return 
false;
  }
  
  public function 
setOutput($path)
  {
    
$this->_output $path;
    return 
true;
  }
  
  public function 
process($filter)
  {
    
$method 'filter' $filter;
    if (
method_exists($this$method))
    {
      
$this->tempfile();
      
$this->{$method}();
      
$this->output();
      return 
true;
    }
    return 
false;
  }
  
  public function 
tempfile()
  {
    
# copy original file and assign temporary name
    
$this->_tmp tempnam('/tmp''INST');
    
copy($this->_input$this->_tmp);
  }
  
  public function 
output()
  {
    
# rename working temporary file to output filename
    
copy($this->_tmp$this->_output);
  }
  
  public function 
execute($command)
  {
    
# remove newlines and convert single quotes to double to prevent errors
    
$command str_replace(array("\n""'"), array('''"'), $command);
    
# replace multiple spaces with one
    
$command preg_replace('#(\s){2,}#is'' '$command);
    
# escape shell metacharacters
    
$command escapeshellcmd($command);
    
# execute convert program
    
return shell_exec($command);
  }
  
  
/** ACTIONS */

  
public function resize($w$h)
  {
    
$this->execute("convert $this->_input -resize {$w}x{$h} -unsharp 1.5×1.0+1.5+0.02 $this->_input");
  }

  public function 
colortone($color$level$type 0)
  {
    
$args[0] = $level;
    
$args[1] = 100 $level;
    
$negate $type == '-negate' '';
    
$this->execute("convert 
        {$this->_tmp} 
        ( -clone 0 -fill $color -colorize 100% ) 
        ( -clone 0 -colorspace gray $negate ) 
        -compose blend -define compose:args=$args[0],$args[1] -composite 
        {$this->_tmp}"
);
  }
  
  public function 
border($color 'black'$width 20)
  {
    
$this->execute("convert $this->_tmp -bordercolor $color -border {$width}x{$width} $this->_tmp");
  }
  
  public function 
frame($frame)
  {
    
$frame dirname(realpath(__FILE__)) . '/' $frame;
    
$this->execute("convert $this->_tmp ( $frame -resize {$this->_width}x{$this->_height}! -unsharp 1.5×1.0+1.5+0.02 ) -flatten $this->_tmp");
  }
  
  public function 
vignette($color_1 'none'$color_2 'black'$crop_factor 1.5)
  {
    
$crop_x floor($this->_width $crop_factor);
    
$crop_y floor($this->_height $crop_factor);
    
$this->execute("convert 
        ( {$this->_tmp} ) 
        ( -size {$crop_x}x{$crop_y} 
        radial-gradient:$color_1-$color_2 
        -gravity center -crop {$this->_width}x{$this->_height}+0+0 +repage )
        -compose multiply -flatten 
        {$this->_tmp}"
);
  }
  
  
/** FILTER METHODS */

  
public function filterGotham()
  {
    
$this->execute("convert $this->_tmp -modulate 120,10,100 -fill #222b6d -colorize 20 -gamma 0.5 -contrast -contrast $this->_tmp");
    
$this->border($this->_tmp);
  }

  public function 
filterToaster()
  {
    
$this->colortone('#330000'1000);
    
$this->execute("convert $this->_tmp -modulate 150,80,100 -gamma 1.2 -contrast -contrast $this->_tmp");
    
$this->vignette('none''LavenderBlush3');
    
$this->vignette('#ff9966''none');
  }

  public function 
filterNashville()
  {
    
$this->colortone('#222b6d'1000);
    
$this->colortone('#f7daae'1001);
    
$this->execute("convert $this->_tmp -contrast -modulate 100,150,100 -auto-gamma $this->_tmp");
    
$this->frame('Assets/Frames/Nashville');
  }

  public function 
filterLomo()
  {
    
$command "convert $this->_tmp -channel R -level 33% -channel G -level 33% $this->_tmp";
    
$this->execute($command);
    
$this->vignette();
  }

  public function 
filterKelvin()
  {
    
$this->execute("convert 
        ( $this->_tmp -auto-gamma -modulate 120,50,100 ) 
        ( -size {$this->_width}x{$this->_height} -fill rgba(255,153,0,0.5) -draw 'rectangle 0,0 {$this->_width},{$this->_height}' ) 
        -compose multiply 
        $this->_tmp"
);
    
$this->frame('Assets/Frames/Kelvin');
  }

  public function 
filterTiltShift()
  {
    
$this->execute("convert 
        ( $this->_tmp -gamma 0.75 -modulate 100,130 -contrast ) 
        ( +clone -sparse-color Barycentric '0,0 black 0,%h white' -function polynomial 4,-4,1 -level 0,50% ) 
        -compose blur -set option:compose:args 5 -composite 
        $this->_tmp"
);
  }

}

?>


Siaip kodo vykdymas ir t.t. aisku tik esme tame kad nesuprantu kur ir kas vykdoma cia. Ir galvoju kad galbut man ju nevykdo?

<?php
execute
("convert 
        ( $this->_tmp -auto-gamma -modulate 120,50,100 ) 
        ( -size {$this->_width}x{$this->_height} -fill rgba(255,153,0,0.5) -draw 'rectangle 0,0 {$this->_width},{$this->_height}' ) 
        -compose multiply 
        $this->_tmp"
);
?>

Ar gabut eina sias eilutes kazkur ivykdyti be php?
« Paskutinį kartą keitė: 2013-02-19 07:29:25 am sukūrė ganjabest »
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Prisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: [Klausimas] php foto filtrai
« Atsakymas #1 Įrašytas: 2013-02-20 14:09:26 pm »
cia viskas pilnai aprasyta: http://net.tutsplus.com/tutorials/php/create-instagram-filters-with-php/

o siaip tai 1) tikriausiai execute komanda pas tave yra uzdrausta 2) turetu veikti, jei naudoji linux'us ir yra irasyti reikalaujami moduliai i pati linuxa, nes pati darba atlieka linux'as
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 962
  • Karma: +41/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: [Klausimas] php foto filtrai
« Atsakymas #2 Įrašytas: 2013-02-20 15:25:30 pm »
Aha. Aciu, dabar supratau viska. Veikia ir ant kitu OS tik reikia papildomu extension'u . Viskas aprasyta cia http://imagemagick.org . Tik dabar galvoju ar verta i sita dalyka veltis. Gal but eiti kitu keliu. Nes tarkim ikelus i nuomojama serveri gali iskilti problemu. Siaip vienintelis dalykas kodel turbut nudingas sitas "reikalas" del supaprastintu komandiniu eiluciu. Gerai, kad daug kas aprasyta ju oficialiam puslapi, bet aplamai pradeti derinti kelis dalykus vienu metu sudetingas reikalas, o platesnes info siuo klausimu nelabai randu. Nors aplamai man sitas dalykas naujas, bet idomus:D

P.S pas tave laikas skuba :D
« Paskutinį kartą keitė: 2013-02-20 15:28:43 pm sukūrė ganjabest »
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Prisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: [Klausimas] php foto filtrai
« Atsakymas #3 Įrašytas: 2013-02-20 16:49:36 pm »
Aha. Aciu, dabar supratau viska. Veikia ir ant kitu OS tik reikia papildomu extension'u . Viskas aprasyta cia http://imagemagick.org . Tik dabar galvoju ar verta i sita dalyka veltis. Gal but eiti kitu keliu. Nes tarkim ikelus i nuomojama serveri gali iskilti problemu. Siaip vienintelis dalykas kodel turbut nudingas sitas "reikalas" del supaprastintu komandiniu eiluciu. Gerai, kad daug kas aprasyta ju oficialiam puslapi, bet aplamai pradeti derinti kelis dalykus vienu metu sudetingas reikalas, o platesnes info siuo klausimu nelabai randu. Nors aplamai man sitas dalykas naujas, bet idomus:D

P.S pas tave laikas skuba :D


laika sutvarkiau ^^
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Manualai.lt Forumas

Ats: [Klausimas] php foto filtrai
« Atsakymas #3 Įrašytas: 2013-02-20 16:49:36 pm »