Saturday, January 31, 2009

ImageMagickとPHPで3色モノトーンの角丸四角画像に変換する

ImageMagickとPHPで3色モノトーンの角丸四角画像に変換するには、以下のコードを実行します。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja" dir="ltr">
<head>
<title>sample743(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 画像を三色モノトーンの角丸四角画像に変換する */
/* 右余白 */
$pright=5;
/* 角丸x */
$rx = 10;
/* 角丸y */
$ry = 10;
/* 左画像 */
$im = new Imagick("sf2.jpg");
$im->setImageColorspace(Imagick::COLORSPACE_GRAY);
//$im->colorizeImage("#c06030", 0.3);
$imb = $im->clone();
$imb->colorizeImage("#c06030", 1);
$imb->setImageOpacity(0.3);
$im->compositeImage($imb, Imagick::COMPOSITE_DEFAULT, 0, 0, Imagick::CHANNEL_ALL);
/* 左マスク作成 */
$im2 = new Imagick();
$im2->newImage($im->getImageWidth(), $im->getImageHeight(), "none");
$im2->setImageMatte(true);
$idraw = new ImagickDraw();
$idraw->setFillColor('white');
$idraw->roundrectangle(0, 0,
$im->getImageWidth()/3-$pright-1, $im->getImageHeight()-1, $rx, $ry);
$im2->drawImage($idraw);
$im2->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);
$imb->destroy();
$im->destroy();

/* 中央画像 */
$im = new Imagick("sf2.jpg");
$im->setImageColorspace(Imagick::COLORSPACE_GRAY);
//$im->colorizeImage("#50b030", 0.3);
$imb = $im->clone();
$imb->colorizeImage("#50b030", 1);
$imb->setImageOpacity(0.3);
$im->compositeImage($imb, Imagick::COMPOSITE_DEFAULT, 0, 0, Imagick::CHANNEL_ALL);
/* 中央マスク作成 */
$im3 = new Imagick();
$im3->newImage($im->getImageWidth(), $im->getImageHeight(), "none");
$im3->setImageMatte(true);
$idraw2 = new ImagickDraw();
$idraw2->setFillColor('white');
$idraw2->roundrectangle($im->getImageWidth()*1/3, 0,
$im->getImageWidth()*2/3-$pright-1, $im->getImageHeight()-1, $rx, $ry);
$im3->drawImage($idraw2);
$im3->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);
$imb->destroy();
$im->destroy();


/* 右画像 */
$im = new Imagick("sf2.jpg");
$im->setImageColorspace(Imagick::COLORSPACE_GRAY);
//$im->colorizeImage("#3040c0", 0.3);
$imb = $im->clone();
$imb->colorizeImage("#3040c0", 1);
$imb->setImageOpacity(0.3);
$im->compositeImage($imb, Imagick::COMPOSITE_DEFAULT, 0, 0, Imagick::CHANNEL_ALL);
/* 右マスク作成 */
$im4 = new Imagick();
$im4->newImage($im->getImageWidth(), $im->getImageHeight(), "none");
$im4->setImageMatte(true);
$idraw3 = new ImagickDraw();
$idraw3->setFillColor('white');
$idraw3->roundrectangle($im->getImageWidth()*2/3, 0,
$im->getImageWidth()-$pright-1, $im->getImageHeight()-1, $rx, $ry);
$im4->drawImage($idraw3);
$im4->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);

$im2->compositeImage($im3, Imagick::COMPOSITE_DEFAULT, 0, 0, Imagick::CHANNEL_ALL);
$im2->compositeImage($im4, Imagick::COMPOSITE_DEFAULT, 0, 0, Imagick::CHANNEL_ALL);

$im2->writeImage('sample743a.png');
$im4->destroy();
$im3->destroy();
$im2->destroy();
$imb->destroy();
$im->destroy();
?>
<img src="sample743a.png" />

</body>
</html>

元画像(sf2.jpg)


出力画像()


関連項目
ImageMagickで画像を3色のモノトーンにした画像に変換する (convertコマンドで同様の処理)
ImageMagickとPHPで黄色だけを強調してにじませる

groovyで画像にノイズをかける

groovyで画像にノイズをかけるには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample868a.png", 200, 200){
antialias("on")
rect( x: 0, y: 0, width: 200, height: 200,
borderColor: no){
texturePaint(x: 0, y: 0, file: 'sf.jpg' )
filters {
noise(amount:30, density:0.3, distribution:0.3, monochrome:true)
}
}
}


元画像(sf.jpg)


出力画像(sample868a.png)
groovyでノイズをかけた画像

動作環境
Groovy1.6.0 Beta2, JDK1.6 Update11

関連項目
groovyでノイズテクスチャを作成する

Friday, January 30, 2009

RMagickで画像にハーフトーンのディザリングをかける

RMagickで画像にハーフトーンのディザリングをかけるには、以下のコードを実行します。

require 'RMagick'
include Magick

# env: ruby1.8.6, rmagick2.7.1
images = ImageList.new("sf.jpg")
img2 = images[0].ordered_dither("h6x6a,16")
img2.write("sample761a.png")

exit

元画像(sf.jpg)


出力画像(sample761a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで、画像にハーフトーンのディザリングをする (convertコマンドでの同様の処理。ほかのパターンの例など)

groovyで四角を描画する

groovyで四角を描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample804a.png", 100, 100){
antialias("on")
rect( x:10, y:10, width:80, height:80,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}


出力画像(sample804a.png)
groovyで描画した四角

動作環境
Groovy1.6.0 Beta2, JDK1.6 Update11

関連項目
groovyで円を描画する
groovyで楕円を描画する
groovyで直線を描画する

SVGRendererで四角を描画する (SVGRedererで同様の処理を行う場合)
ScriptomとImageMagickで四角を描画する (ScriptomとImageMagickで四角を描画する場合)

Thursday, January 29, 2009

groovyでノイズテクスチャを作成する

groovyでノイズテクスチャを作成するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample867a.png", 200, 200){
antialias("on")
rect( x: 0, y: 0, width: 200, height: 200,
borderColor: no){
filters {
noiseTexture()
}
}
}


出力画像(sample867a.png)
groovyで作成したノイズテクスチャ


動作環境
Groovy1.6.0 Beta2, JDK1.6 Update11

関連項目
groovyで画像を台形変形させる

RMagickで文字列を右寄せ・左寄せする

RMagickで文字列を右寄せ・左寄せするには、以下のコードを実行します。

require 'RMagick'
include Magick

img = Image.read("label:日本語の\n文字列"){
self.background_color = "white"
self.fill = "#887070"
# パスは環境によって変えてね
self.font = "c:\\winnt\\fonts\\msgothic.ttc"
self.pointsize = 50
# 左寄せ
self.gravity = WestGravity
}
img[0].write("sample760a.png")

img2 = Image.read("label:日本語の\n文字列"){
self.background_color = "white"
self.fill = "#807070"
# パスは環境によって変えてね
self.font = "c:\\winnt\\fonts\\msgothic.ttc"
self.pointsize = 50
# 右寄せ
self.gravity = EastGravity
}
img2[0].write("sample760b.png")

exit

出力画像1(sample760a.png)


出力画像2(sample760b.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
RMagickで虹色グラデーションの文字列を描画する

Wednesday, January 28, 2009

ImageMagickとPHPで黄色だけを強調してにじませる

ImageMagickとPHPで黄色だけを強調してにじませるには、以下のコードを実行します。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja" dir="ltr">
<head>
<title>sample742(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 画像で黄色っぽいところ以外を白黒にして、黄色部分をにじませる */
$im = new Imagick("sf.jpg");
$im->modulateImage(80, 20, 100);
$im2 = new Imagick("sf.jpg");
$im2->setImageMatte(true);
$im3 = $im2->fxImage("(hue>0.11&&hue<0.19&&intensity<0.93&&saturation>0.5)?1:0", Imagick::CHANNEL_ALPHA);
$im3->modulateImage(100, 150, 100);
$im4 = new Imagick("sf.jpg");
$im4->setImageMatte(true);
$im5 = $im4->fxImage("(hue>0.11&&hue<0.19&&intensity<0.93&&saturation>0.5)?0.9:0", Imagick::CHANNEL_ALPHA);
$im5->blurImage(5,10,Imagick::CHANNEL_ALL);

$im->compositeImage($im3, Imagick::COMPOSITE_DEFAULT, 0, 0);
$im->compositeImage($im5, Imagick::COMPOSITE_DEFAULT, 0, 0);

$im->writeImage('sample742a.png');
$im5->destroy();
$im4->destroy();
$im3->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample742a.png" />

</body>
</html>

元画像(sf.jpg)


出力画像(sample742a.png)


関連項目
ImageMagickとPHPで複数の画像の境界をぼかして連結する
ImageMagickとPHPで画像をグレースケールの立体的な角丸四角に変換する
ImageMagickで黄色だけを強調してにじませる (convertコマンドによる同様の処理)

groovyで車の形を描画する

groovyで車の形を描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample803a.png", 200, 200){
antialias("on")
raceCarShape( x:0, y:40, width:200, height:120,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}


出力画像(sample803a.png)
groovyで描画した車

動作環境
Groovy1.6.0 Beta2, JDK1.6 Update11

関連項目
groovyで画像を台形変形させる
SVGRendererで車の形を描画する (SVGRendererでの同様の処理)

Tuesday, January 27, 2009

RMagickで虹色グラデーションの文字列を描画する

RMagickで虹色の文字列を描画するには、以下のコードを実行します。


require 'RMagick'
include Magick

images = ImageList.new("xc:blue", "xc:green", "xc:yellow",
"xc:orange", "xc:red"){
self.size = "1x1"
}
img2 = images.append(false);
img3 = Image.read("label:ImageMagick"){
self.background_color = "none"
self.fill = "white"
self.font = "Tahoma"
self.pointsize = 50
}
img4 = img2.resize(img3[0].columns, img3[0].rows)
img4.alpha = ActivateAlphaChannel
img5 = img4.composite(img3[0], 0, 0, DstInCompositeOp)

img5.write("sample759a.png")

exit


出力画像(sample759a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで、虹色グラデーションの文字列を描画する (convertコマンドでの同様の処理)
Rmagickで半透明のぼかし文字列を描画する
RMagickで日本語文字列を描画する

groovyで画像を台形変形させる

groovyで画像を台形変形させるには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample866a.png", 200, 200){
antialias("on")
rect( x: 0, y: 0, width: 200, height: 200,
borderColor: no){
texturePaint(x: 0, y: 0, file: 'sf.jpg' )
filters {
perspective(x0:25, y0:30, x1:175, y1:30,
x2:200, y2:200, x3:0, y3:200)
}
}
}


元画像(sf.jpg)


出力画像(sample866a.png)
groovyで台形変形させた画像

動作環境
Groovy1.6.0 Beta2, JDK1.6 Update11

関連項目
groovyで画像を指定された点に引き寄せる

Monday, January 26, 2009

RMagickで画像を文字列つきのポラロイド写真風にする

RMagickで画像を文字列つきのポラロイド写真風にするには、以下のコードを実行します。



require 'RMagick'
include Magick

images = ImageList.new("sf.jpg")
images[0]["caption"] = "サンフランシスコ"
img2 = images[0].polaroid(5){
# 環境によってパスを変えてね
self.font = "c:\\winnt\\fonts\\msgothic.ttc"
self.pointsize = 20
self.gravity = SouthGravity
# 文字列の色
self.fill = "#787070"
# 枠の色
self.border_color = "#f8f8ff"
# 文字の背景
self.undercolor = "none"
# 影の色
self.shadow_color = "#202020"
}
img3 = Image.new(img2.columns, img2.rows){
self.background_color = "#f0f0f3"
}
img4 = img3.composite(img2, CenterGravity, 0, 0, OverCompositeOp);

img4.write("sample758a.png")

exit


元画像(sf.jpg)


出力画像(sample758a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
RMagickでアニメーションGIFを作成する
RMagickでパスを使用して左上と右下が丸くなった四角を描画する

groovyで二次曲線を描画する

groovyで二次曲線を描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample802a.png", 200, 200){
antialias("on")
quadCurve( x1:200, y1:0, ctrlx:0, ctrly: 100,
x2:200, y2:200,
borderColor: color("#103080"),
borderWidth: 2
)
}


出力画像(sample802a.png)


動作環境
Groovy1.6.0 Beta2, JDK1.6 Update11

関連項目
groovyでポリラインを描画する
SVGRendererで二次曲線を描画する (SVGRendererでの同様の処理)

Sunday, January 25, 2009

ImageMagickとPHPで複数の画像の境界をぼかして連結する

Imagickで複数の画像の境界をぼかして連結するには、以下のコードを実行します。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"
dir="ltr">
<head>
<title>sample741(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 指定された複数画像ファイルの高さをそろえて連結する(境界はぼかす) */
$fns = array('sample3b.jpg', 'sf.jpg', 'sf2.jpg');
/* 画像の高さ */
$height = 100;
/* ぼかし幅 */
$bw = 20;
$im = new Imagick($fns[0]);
for($ind=1;$ind<count($fns);$ind++){
$imt = new Imagick($fns[$ind]);
$imt->setImageMatte(true);
$imt->resizeImage(0, $height, imagick::FILTER_MITCHELL, 1);
/* リサイズ後の幅がぼかし幅ピクセル未満は何もしない */
if( $imt->getImageWidth() >= $bw ){
/* alpha値をぼかし幅だけグラデーションになるように設定 */
$it = $imt->getPixelIterator();
foreach($it as $py => $line){
foreach($line as $px => $pixel){
if( $px < $bw ){
$pixel->setColorValue(Imagick::COLOR_ALPHA, $px/$bw);
}
}
$it->syncIterator();
}
/* 元画像を拡張 */
$im->setImageBackgroundColor('none');
$im->setImageExtent(
$imt->getImageWidth()-$bw+$im->getImageWidth(), $height);
$im->compositeImage($imt, Imagick::COMPOSITE_DEFAULT,
$im->getImageWidth()-$imt->getImageWidth(), 0,
Imagick::CHANNEL_ALL);
}
$imt->destroy();
}
$im->writeImage('sample741a.png');
$im->destroy();
?>
<img src="sample741a.png" />

</body>
</html>


元画像1(samlpe3b.jpg)


元画像2(sf.jpg)


元画像3(sf2.jpg)


出力画像(sample741a.png)


関連項目
ImageMagickとPHPで複数の画像ファイルの高さをそろえて連結する
ImageMagickとPHPで画像をグレースケールの立体的な角丸四角に変換する

groovyで画像を指定された点に引き寄せる

groovyで画像を指定された点に引き寄せるには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample866a.png", 300, 225){
antialias("on")
rect( x: 0, y: 0, width: 300, height: 225,
borderColor: no){
texturePaint(x: 0, y: 0, file: 'sf2.jpg' )
filters {
pinch(centreX:0.4, centreY:0.5, angle:30, amount:0.5, radius:150)
}
}
}


元画像(sf2.jpg)


出力画像(sample866a.png)


動作環境
Groovy1.6.0 Beta2, JDK1.6 Update11

関連項目
groovyで画像をさまざまなパターンで塗りつぶす
groovyで画像の彩度を上げる