角丸画像を簡単に作る
Keitaです。最近、モテるためにがんばっていますが、周りの女性は誰一人として振り向いてくれません。
さて、そんなわけで、世間では、いろいろな角を丸めると、モテるといううわさを聞いてとりあえず角を丸めることにしてみました。
でも、CSSの角を丸める方法は、わりと論争の的でこれがいいよ!と人に勧める知識もないので、とりあえず、画像を丸めてみることにしました。
今回も、Webアプリケーションに関する面倒な問題を簡単に解決するツール、PHPを利用します。
画像を加工するのに何使うは、結構、選択肢があるのですが、そのものずばりの関数があるimagick 2.0を使いたいと思います。
コードはこんな感じです。
これで、完了です。
なんて簡単!
それでは、よい角丸ライフを!!
っと、まだリリースもしてない拡張をトピックに出すだけだと気が引けるので、MagickWand用のコードも載せておきたいと思います。
先のimagick 2.0.0を参考に、さくっとつくったもので、わりと検証してなかったり変数名なんだよとかいう感じですが、気にしないでください
といってもお昼休みにちゃちゃっとつくったものなので、なんか、致命的なバグがあるかもしれませんので、あんまりいじめないでください。(今、一部うごかないらしいです。)
それでは、よいモテライフを!
PS.ほれたでしょうか?
さて、そんなわけで、世間では、いろいろな角を丸めると、モテるといううわさを聞いてとりあえず角を丸めることにしてみました。
でも、CSSの角を丸める方法は、わりと論争の的でこれがいいよ!と人に勧める知識もないので、とりあえず、画像を丸めてみることにしました。
今回も、Webアプリケーションに関する面倒な問題を簡単に解決するツール、PHPを利用します。
画像を加工するのに何使うは、結構、選択肢があるのですが、そのものずばりの関数があるimagick 2.0を使いたいと思います。
コードはこんな感じです。
<?php
$image =& new Imagick();
$image->readImage('test2.jpg'); // ファイルを読み込む
$image->roundCorners(20, 20); // 角の半径を指定する
$image->setImageFormat('png'); // 画像形式をpngに
$image->writeImage('test2r.png'); //ファイルに保存
これで、完了です。
なんて簡単!
それでは、よい角丸ライフを!!
っと、まだリリースもしてない拡張をトピックに出すだけだと気が引けるので、MagickWand用のコードも載せておきたいと思います。
先のimagick 2.0.0を参考に、さくっとつくったもので、わりと検証してなかったり変数名なんだよとかいう感じですが、気にしないでください
//MagickWand 1.0.4+ 6.3.3.1にて動作確認
function MagickRoundcorners($hwnd, $xRounding, $yRounding,$strokeWidth = 10, $displace = 5, $correction = -6)
{
$imageWidth = MagickGetImageWidth($hwnd);
$imageHeight = MagickGetImageHeight($hwnd);
if ($imageWidth === false || $imageHeight === false){
return false;
}
$status = MagickSetImageType($hwnd, MW_TrueColorMatteType);
$color = NewPixelWand();
$draw = NewDrawingWand();
$maskImage = NewMagickWand();
$status = PixelSetColor($color, "transparent");
if ($status === false) {
MyMagickDestoryWand($maskImage, $color, $draw);
return false;
}
$status = MagickNewImage( $maskImage, $imageWidth, $imageHeight, $color );
if ($status === false) {
MyMagickDestoryWand($maskImage, $color, $draw);
return false;
}
MagickSetImageBackgroundColor($maskImage, $color);
$status = PixelSetColor($color, "white");
if ($status === false) {
MyMagickDestoryWand($maskImage, $color, $draw);
return false;
}
DrawSetFillColor($draw, $color);
$status = PixelSetColor($color, "black");
if ($status === false) {
MyMagickDestoryWand($maskImage, $color, $draw);
return false;
}
DrawSetStrokeColor($draw, $color);
DrawSetStrokeWidth($draw, $strokeWidth);
DrawRoundRectangle($draw, $displace, $displace, $imageWidth + $correction, $imageHeight + $correction, $xRounding, $yRounding );
$status = MagickDrawImage($maskImage, $draw);
if ($status === false) {
MyMagickDestoryWand($maskImage, $color, $draw);
return false;
}
$status = MagickCompositeImage($hwnd, $maskImage, MW_DstInCompositeOp, 0, 0);
if ($status === false) {
MyMagickDestoryWand($maskImage, $color, $draw);
return false;
}
$draw = NewDrawingWand();
$maskImage = NewMagickWand();
$color = NewPixelWand();
$status = PixelSetColor($color, "transparent");
if ($status === false) {
MyMagickDestoryWand($maskImage, $color, $draw);
return false;
}
MagickNewImage($maskImage, $imageWidth, $imageHeight, $color );
DrawSetFillColor($draw, $color);
DrawSetStrokeColor($draw, $color);
DrawSetStrokeWidth($draw, 2);
DrawRoundRectangle($draw, 0, 0, $imageWidth, $imageHeight, $xRounding, $yRounding);
MagickSetImageBackgroundColor($maskImage,$color);
$status = MagickDrawImage($maskImage,$draw);
if ($status === false) {
MyMagickDestoryWand($maskImage, $color, $draw);
return false;
}
$status = MagickCompositeImage($hwnd, $maskImage, MW_OverCompositeOp, 0, 0);
if ($status === false) {
MyMagickDestoryWand($maskImage, $color, $draw);
return false;
}
MyMagickDestoryWand($maskImage, $color, $draw);
return true;
}
function MyMagickDestoryWand($mwand, $pwand, $dwand)
{
DestroyMagickWand($mwand);
DestroyPixelWand($pwand);
DestroyDrawingWand($dwand);
}
使い方
$image = NewMagickWand(); MagickReadImage($image, 'file.jpg'); MagickRoundcorners($image, 20, 20); MagickSetFormat($image, 'png'); MagickWriteImage($image, 'file.png');最後に、コードなんて書きたくないよ!というものぐさなあなたのために、角を丸くしてモテるページを用意してみました。
といってもお昼休みにちゃちゃっとつくったものなので、なんか、致命的なバグがあるかもしれませんので、あんまりいじめないでください。(今、一部うごかないらしいです。)
それでは、よいモテライフを!
PS.ほれたでしょうか?

コメント
>PS.ほれたでしょうか?
ほれました(笑)
投稿者: Anonymous | 2007年8月30日 14:49
> Anonnymousさん
ありがとうございます。
生まれて初めてモテることができて、大変うれしいです。式場を探してきます。
投稿者: keita@unoh | 2007年8月30日 15:12
ティモテ…
投稿者: 21 | 2007年8月30日 17:14
こんにちわ!
角丸を置いているサーバは、ウノウのものではなく個人のサーバなので、ちょっとおかしいものがおいてあるかもしれませんね!
投稿者: keita@unoh | 2007年8月30日 17:33
初めまして
自分も、モテたくてImagickで角円に挑戦したんですが
出来上がった画像は、元のままの画像でした。
windowsでは無理なのでしょうか?
モテるのは無理なのでしょうか・・・(;_;)
環境は、下記のような感じです。
Windows XP
2.1.0-rc3
ImageMagick 6.3.3 04/21/07 Q16
とってもモテたいです。
他に、モテる方法
MASKで角まるにする方法とかはあるのでしょうか?
投稿者: か@札幌 | 2008年2月 7日 00:53
はじめまして、
最近はとがってるとモテやすいと聞いています。
Imagick2.1.0は、僕の手元の環境では動いていて、ちょうどURLでかいたページがrc3です。
もしよければ、再現するかどうか試してみてください。
Windowsのほうでは僕は検証環境をもっていなくて、今はためせないのですが、読み込むファイル名と書き出すファイル名が違っていても、同じファイルを書き出してしまう感じでしょうか。
あと、画像形式によってはImageMagickがおかしい動きしたりするので、そちらも注意が必要な場合があります。
MASKで角丸とかも僕はためしてないので、ちょとわかりません。
でも、きっともてると僕は信じてます。
最近はほかの画像ライブラリも勉強中です、近いうちにまたこのブログでかけたらとおもってますのでお楽しみに~
投稿者: Keita | 2008年2月 8日 01:48
おばんさまです。
お返事ありがとうございました。
URLのページは無事かどまるになったんですが
自分の環境では、php5.2.0&5.2.4では、ファイル名を替えても元画像と同じでした。
ちなみに、あっちこっち探してroundCornersを使っている他の
サンプルも試したんですが全部同じ状態です。
でも、安心しました。
丸くなくてもモテそうだとの事で(>_
投稿者: か@札幌 | 2008年2月12日 02:49
おばんさまです。
お返事ありがとうございました。
URLのページは無事かどまるになったんですが
自分の環境では、php5.2.0&5.2.4では、ファイル名を替えても元画像と同じでした。
ちなみに、あっちこっち探してroundCornersを使っている他の
サンプルも試したんですが全部同じ状態です。
でも、安心しました。
丸くなくてもモテそうだとの事で(>_
投稿者: か@札幌(規制対策?) | 2008年2月12日 02:50