PHPのImagickの主なコマンド
僕はGDかImageMagickコマンドをexecする派だったんだけど、
Imagickをつかわないとどうにもコマンドが足りなかったので初体験した。
最初ドキュメントがphp.netだけしかなくてどうしようかと思ったけど、よく見たらImageMagickのconvertコマンド程度とASとかグラフィック系言語をつかっていればすぐわかる感じだった。
というわけでメモ
Imagick
convertコマンドを知っていればそこそこわかる
$image = new Imagick(); $image = new Imagick("hoge.jpg"); $width = $image->getImageWidth(); $height = $image->getImageHeight(); $image->setImageFormat("png"); // 出力 echo $image; // 保存 $image->writeImage("hoge.png");
Imagickクラス自体はconvertと同じようなオプションがそろってる感じだなー
ASで言うとSpriteかな
http://php.net/imagick
ImagickPixel
ピクセル(主に色の取り扱い)
$pixel = new ImagickPixel(); $pixel = new ImagickPixel(/* setColorの引数も使える */); // 色の設定 かなり独特 GDやASなど他の言語と違う気がする // 色を表す文字列を渡す $pixel->setColor("rgb(255, 0, 0)"); // RGB $pixel->setColor("#ff0000"); // Hex $pixel->setColor("red"); // 文字 $pixel->setColor("cmyk(100,100,100,10)"); // CMYK // 色を返す list($r, $g, $b [, $alfa]) = $pixel->getColor(); // 新しい画像の作成 // $pixelで塗り $image->newImage(100, 100, $pixel);
ImagickDraw
描画オブジェクト
ASを知っていればlineTo, moveTo curveTo みたいな感じで以外と直感的に使える感じ
$draw = new ImagickDraw(); // レンダリング $image->drawImage($draw); // パスを書く // 開始 $draw->pathStart(); // 終了 $draw->pathFinish(); // 色の設定 // 多分ボーダー $draw->setStrokeColor($pixel); // 塗り $draw->setFillColor($pixel); // テキスト $draw->setFontSize(20); $draw->setFont("aquafont.ttf"); $draw->annotation($x , $y, "Hello world"); // ポイントの移動 $draw->pathMoveToAbsolute($x, $y); // 絶対座標 $draw->pathMoveToRelative($x, $y); // 相対座標 // 直線 $draw->pathLineToAbsolute($x, $y); $draw->pathLineToRelative($x, $y); // 二次ベジェ曲線 $draw->pathCurveToQuadraticBezierAbsolute( $x1, $y1, $x, $y); $draw->pathCurveToQuadraticBezierRelative( $x1, $y1, $x, $y); // 制御点を指定しない滑らかな二次ベジェ曲線 $draw->pathCurveToQuadraticBezierSmoothAbsolute($x, $y); $draw->pathCurveToQuadraticBezierSmoothRelative ($x, $y); // 三次ベジェ曲線 $draw->pathCurveToAbsolute( $x1, $y1, $x2, $y2, $x, $y); $draw->pathCurveToRelative( $x1, $y1, $x2, $y2, $x, $y); // 制御点を指定しない滑らかな三次ベジェ曲線 $draw->pathCurveToSmoothAbsolute( $x2, $y2, $x, $y ); $draw->pathCurveToSmoothRelative( $x2, $y2, $x, $y );
頑張ろう