imagick使ったほうが明らかに綺麗&楽にできるんだけど
勉強がてらGDオンリーでやってみた。
結果
やっぱ綺麗に抜けないw
あとimagickだと3行くらいのソースが無駄に長くなるのがね。
実用的ではないです。
まあ一応GDで画像操作するコツみたいなのはわかったので
無駄ではないかな。。。
一応こんなかんじになりました。
//角の大きさ $cornerRad = 15; //元画像の読み込み $originalImage = imageCreateFromJPEG('images/test.png'); //角画像の読み込み $cornerPng = ImageCreateFromPNG('rounded_corner.png'); //角をリサンプリングするための画像 $cornerResized = imageCreateTrueColor($cornerRad,$cornerRad); //リサンプリング用の画像(真っ黒)に角画像をコピーしてついでに大きさを調整する($cornerRad) imageCopyResampled($cornerResized,$cornerPng,0,0,0,0,$cornerRad,$cornerRad,imageSX($cornerPng),imageSY($cornerPng)); //黒を透明にするため黒を定義 $black = imageColorAllocate($cornerResized,0,0,0); //リサンプル画像の黒を透明にする imageColorTransparent($cornerResized,$black); //元画像のデータ取得 $sizeX = imageSX($originalImage); $sizeY = imageSY($originalImage); //元データの左上の角を丸める imageCopyMerge($originalImage,$cornerResized,0,0,0,0,$cornerRad,$cornerRad,100); //imageRotateで角丸画像を回転させて、元データの右上の角を丸める $rotated = imageRotate($cornerResized,90,0); imageCopyMerge($originalImage,$rotated,0,$sizeY - $cornerRad,0,0,$cornerRad,$cornerRad,100); //imageRotateで角丸画像を回転させて、元データの左下の角を丸める $rotated = imageRotate($cornerResized,270,0); imageCopyMerge($originalImage,$rotated,$sizeX - $cornerRad,0,0,0,$cornerRad,$cornerRad,100); //imageRotateで角丸画像を回転させて、元データの右下の角を丸める $rotated = imageRotate($cornerResized,180,0); imageCopyMerge($originalImage,$rotated,$sizeX - $cornerRad,$sizeY - $cornerRad,0,0,$cornerRad,$cornerRad,100); //画像出力 header("Content-type: image/jpeg"); imagePNG($originalImage); imageDestroy($originalImage); imageDestroy($cornerPng);
左上の画像をPNGで作って
こんなやつ
(背景は黒じゃなくて透明でもOK:どっちにしろ黒バックの画像にリサンプルするから)
それを真っ黒な画像にリサンプルして黒をimageColorTransparentする
でそれを90度ずつ回転させながら角に当ててくってかんじです。