
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ PHP рдФрд░ ImageMagick рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝реЛрдЯреЛ (рдЬреИрд╕реЗ рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо рдкрд░) рдкрд░ рдХреБрдЫ рдкреНрд░рднрд╛рд╡ рдХреИрд╕реЗ рдмрдирд╛рдПрдВред
PHP рдХреЗ рд╕рд╛рде рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ
PHP GD (GIF рдбреНрд░рд╛ / рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдбреНрд░рд╛) рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░рд▓ рдЫрд╡рд┐ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЖрдХрд╛рд░ рдмрджрд▓рдирд╛, рдХреНрд░реЙрдк рдХрд░рдирд╛, рд╡реЙрдЯрд░рдорд╛рд░реНрдХ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдердВрдмрдиреЗрд▓ рдмрдирд╛рдирд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрджрд┐ рдЖрдк рдЬреАрдбреА рдХреЗ рд╕рд╛рде рдХреБрдЫ рдФрд░ рдЬрдЯрд┐рд▓ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ImageMagick рд╣реИ!
рдЬреАрдбреА рдмрдирд╛рдо ImageMagick
рдЖрдЗрдП рдЫрд╡рд┐ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВред
рдЬреАрдбреА:$im = imagecreatefromjpeg('photo.jpg'); $ox = imagesx($im); $oy = imagesy($im); $nx = 640; $ny = 480; $nm = imagecreatetruecolor($nx, $ny); imagecopyresized($nm,$im,0,0,0,0,$nx,$ny,$ox,$oy); imagejpeg($nm, 'photo.jpg');
ImageMagick:IM (ImageMagick рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛) рдореЗрдВ рдЗрдореЗрдЬрд┐рдХ рдирд╛рдордХ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╢реЗрд▓ рд╣реИ, рдЬреЛ ImageMickick API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ PHP рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИред рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ: рдпрд╣
PECL рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдЬреЛ рдХрднреА-рдХрднреА рд╕рд╛рдЭрд╛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
$image = new Imagick('photo.jpg'); $image->resizeImage(640, 480, imagick::FILTER_LANCZOS, 0.9);
рдФрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИ:
exec('mogrify -resize 640x480 photo.jpg');
ImageMagick рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЪреБрдиреЗрдВ (рдпреВрдирд┐рдХреНрд╕ / рдореИрдХ / рд╡рд┐рди) рдФрд░ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдкреИрдХреЗрдЬ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рд╕реНрдерд╛рдкрдирд╛ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЯрд░реНрдорд┐рдирд▓ / рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЬрд╛рдПрдВ,
рдХрдиреНрд╡рд░реНрдЯ рдЯрд╛рдЗрдк
рдХрд░реЗрдВ рдФрд░ рдПрдВрдЯрд░ рджрдмрд╛рдПрдВ, рдЕрдЧрд░ рдЖрдкрдХреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ, рдФрд░ "рдХрдорд╛рдВрдб рдирд╣реАрдВ рдорд┐рд▓реА", рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ! рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЛ PHP рдореЗрдВ рдХреБрдЫ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо - PHP рд╡рд░реНрдЧ
рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдПрдХ PHP рдХреНрд▓рд╛рд╕ рдмрдирд╛рдИ, рддрд╛рдХрд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛ рд╕рдХреЗред
- colortone: рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдФрд░ / рдпрд╛ рдЫрд╛рдпрд╛ рдореЗрдВ рдЫрд╡рд┐ рдХреЗ рд░рдВрдЧ рдЯреЛрди рдХреА рдЗрдЪреНрдЫрд╛ред
- рд╡рд┐рдЧрдиреЗрдЯ: рдЫрд╡рд┐ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рдмреЙрд░реНрдбрд░: рдлреЛрдЯреЛ рдореЗрдВ рдмреЙрд░реНрдбрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
- рдлреНрд░реЗрдо: рдлреЛрдЯреЛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рджрд┐рдП рдЧрдП рдлреНрд░реЗрдо рдХреЛ рдкрдврд╝реЗрдЧрд╛ред
- рдЕрд╕реНрдерд╛рдпреА: рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ (рдореВрд▓ рдЫрд╡рд┐ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐) рдмрдирд╛рддрд╛ рд╣реИред
- рдЖрдЙрдЯрдкреБрдЯ: рдХрд╛рд░реНрдпрд╢реАрд▓ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ
- рдирд┐рд╖реНрдкрд╛рджрд┐рдд: рдХрдорд╛рдВрдб рднреЗрдЬреЗрдВ
рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, рдЬрд┐рд╕реЗ
instagraph.php рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкреЗрд╕реНрдЯ рдХрд░реЗрдВред
class Instagraph { public $_image = NULL; public $_output = NULL; public $_prefix = 'IMG'; private $_width = NULL; private $_height = NULL; private $_tmp = NULL; public static function factory($image, $output) { return new Instagraph($image, $output); } public function __construct($image, $output) { if(file_exists($image)) { $this->_image = $image; list($this->_width, $this->_height) = getimagesize($image); $this->_output = $output; } else { throw new Exception('File not found. Aborting.'); } } public function tempfile() {
рджреЗрдЦрддреЗ рд╣реИрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ
рдореВрд▓ рдЫрд╡рд┐:
рдЧреЛрдердо рдлрд┐рд▓реНрдЯрд░рдЧреЛрдердо рдлрд┐рд▓реНрдЯрд░ рдЫрд╡рд┐ рдХреЛ рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдиреАрд▓реЗ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдЙрдЪреНрдЪ рд╡рд┐рдкрд░реАрдд рдЫрд╡рд┐ред
public function gotham() { $this->tempfile(); $this->execute("convert $this->_tmp -modulate 120,10,100 -fill '#222b6d' -colorize 20 -gamma 0.5 -contrast -contrast $this->_tmp"); $this->border($this->_tmp); $this->output(); }
рдЯреЛрд╕реНрдЯрд░ рдлрд╝рд┐рд▓реНрдЯрд░рдкреБрд░рд╛рдиреЗ рдкреЛрд▓реЗрд░реЙрдЗрдб рд╢реЙрдЯреНрд╕ рдХреА рдпрд╛рдж рддрд╛рдЬрд╛ рдХрд░рддреА рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЗрдВрджреНрд░ рд╕реЗ рдЧреБрд▓рд╛рдмреА / рдирд╛рд░рдВрдЧреА рдЪрдордХ рдХреЗ рд╕рд╛рде рдЬреАрд╡рдВрдд рд░рдВрдЧ рд╣реЛрддреЗ рд╣реИрдВред рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо рдХреЗ рд╕реАрдИрдУ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рд╕рдмрд╕реЗ рдХрдард┐рди рдкреНрд░рднрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред
public function toaster() { $this->tempfile(); $this->colortone($this->_tmp, '#330000', 100, 0); $this->execute("convert $this->_tmp -modulate 150,80,100 -gamma 1.2 -contrast -contrast $this->_tmp"); $this->vignette($this->_tmp, 'none', 'LavenderBlush3'); $this->vignette($this->_tmp, '#ff9966', 'none'); $this->output(); }
рддреБрдо рднреА рдкреВрд░реНрдг рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдлреЗрдж рдлреНрд░реЗрдо рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдЬреЛрдбрд╝реЗрдВ
$this->border($this->_tmp, 'white'); $this->output();
рдиреИрд╢рд╡рд┐рд▓реЗ рдлрд╝рд┐рд▓реНрдЯрд░ public function nashville() { $this->tempfile(); $this->colortone($this->_tmp, '#222b6d', 100, 0); $this->colortone($this->_tmp, '#f7daae', 100, 1); $this->execute("convert $this->_tmp -contrast -modulate 100,150,100 -auto-gamma $this->_tmp"); $this->frame($this->_tmp, __FUNCTION__); $this->output(); }
рд▓реЛрдореЛ рдлрд┐рд▓реНрдЯрд░ public function lomo() { $this->tempfile(); $command = "convert {$this->_tmp} -channel R -level 33% -channel G -level 33% $this->_tmp"; $this->execute($command); $this->vignette($this->_tmp); $this->output(); }
рдХреЗрд▓реНрд╡рд┐рди рдлрд╝рд┐рд▓реНрдЯрд░ public function kelvin() { $this->tempfile(); $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($this->_tmp, __FUNCTION__); $this->output(); }

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╕рднреА рдХреЛрдб рдХреЛ instagraph.php рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬ рд▓рд┐рдпрд╛ рд╣реИред рдЕрдм filter.php рдирд╛рдордХ рдПрдХ рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВред
рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
require 'instagraph.php'; try { $instagraph = Instagraph::factory('input.jpg', 'output.jpg'); } catch (Exception $e) { echo $e->getMessage(); die; } $instagraph->toaster();
рд╡рд╣ рд╕рдм рд╣реИ! рдпрджрд┐ рдЖрдк рд╕рднреА рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
require 'instagraph.php'; try { $instagraph = Instagraph::factory('input.jpg', 'output.jpg'); } catch (Exception $e) { echo $e->getMessage(); die; }
рдЙрддреНрдкрд╛рджрдХрддрд╛
рдкреНрд░рджрд░реНрд╢рди, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдХрд┐рд╕реА рднреА рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдПрдХ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд▓рдЧрднрдЧ 1 рд╕реЗрдХрдВрдб рд╣реИ, рд╣рдо рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ!