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  );


頑張ろう