Saturday, January 17, 2009

RMagickで画像をグラデーションのかかった砂地ぽく加工する

RMagickで画像をグラデーションのかかった砂地ぽく加工するには、以下のコードを実行します。

require 'RMagick'
include Magick

# 画像をグラデーションのかかった砂地ぽく加工する
images = ImageList.new("sf2.jpg")
images[0] = images[0].blur_image(0, 1)
img2 = images.fx("p*0.7+rand()*0.3")
img2.colorspace = GRAYColorspace
img3 = img2.emboss(0, 1)

images2 = Image.read("gradient:#FFFF1050-#3070A050"){
self.size = img3.columns.to_s + "x" + img3.rows.to_s
}
img4 = img3.composite(images2[0], 0, 0, OverCompositeOp)
img4.write("sample752a.png")

exit

元画像(sf2.jpg)


出力画像(sample752a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで画像とグラデーションのかかった砂地を合成する (convertコマンドでの同様の処理)

groovyでバースト状にシェイプを塗りつぶす

groovyでバースト状にシェイプを塗りつぶすには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample862a.png", 200, 200){
antialias("on")
dolphinShape( x:0, y:20, width:200, height:160,
fill:color("#ffffff"), borderColor:no ){
filters {
shapeBurst()
}
}
}


出力画像(sample862a.png)


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

関連項目
groovyで画像をさまざまなパターンで塗りつぶす
groovyで画像に水面の波紋のような効果をかける
groovyで任意の2色のグラデーションでバースト状に塗りつぶす (任意の2色グラデーションでバースト状に塗りつぶした場合)

Friday, January 16, 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>sample738(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* ランダムな光のストライプを生成する */
/* 画像幅 */
$sx=300;
/* 画像高さ */
$sy=200;
/* 最小半径 */
$minr=15;
/* 最大半径 */
$maxr=40;
/* 横中央線からの最大幅 */
$maxh=40;
/* 円間の最大x距離 */
$maxw=50;
/* 円間の最小x距離 */
$minw=20;
/* 光の色 */
$light = "#bbddffe0";
/* 最小ストライプ幅 */
$minsw = 3;
/* 最大ストライプ幅 */
$maxsw = 30;
/* ストライプ最小リサイズ幅 */
$minrs = -30;
/* ストライプ最大リサイズ幅 */
$maxrs = 90;
/* モーションブラー */
$mb = 30;

$im = new Imagick();
$im->newImage($sx, $sy, 'none');


$idraw = new ImagickDraw();
$idraw->setFillColor($light);
/* ランダムな円を描画 */
for($lx=0;$lx<$sx;){
/* 半径 */
$rad = rand($minr, $maxr);
/* 円中心のy座標 */
$cy = $sy/2+rand($maxh, $maxh*-1);
$idraw->ellipse($lx, $cy, $rad, $rad, 0,360);
$lx += rand($minw,$maxw);
}
$im->drawImage($idraw);
/* ぼかし */
$im->blurImage(0, 5, Imagick::CHANNEL_ALL);
/* ストライプ上に切り取って拡大&スクロール */
$im2 = new Imagick();
$im2->newImage($sx, $sy, 'white');
$im2->setImageMatte(true);
for($lx=0;$lx<$sx;){
/* ストライプ幅 */
$sw = rand($minsw,$maxsw);
/* 拡大前の切り取り幅 */
$dh = rand($minrs, $maxrs);
$ims = $im->clone();
$ims->cropImage($sw, $sy-$dh, $lx, $dh/2);
$ims->resizeImage($sw, $sy, imagick::FILTER_MITCHELL, 1);
$im2->compositeImage($ims, Imagick::COMPOSITE_DEFAULT, $lx, 0,
Imagick::CHANNEL_ALL);
$ims->destroy();
$lx += $sw;
}
$idraw2 = new ImagickDraw();
$idraw2->setStrokeColor('#000000');
$idraw2->line(0,100,300,100);
$im2->drawImage($idraw2);

$im2->motionBlurImage(0,$mb,90);
$im2->motionBlurImage(0,$mb,270);


$im2->writeImage('sample738a.png');

$idraw->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample738a.png" />

</body>
</html>


出力画像(sample738a.png)


関連項目
ImageMagickとPHPで青白く輝く文字列を描画する
ImageMagickとPHPで、文字列の影に横線を入れる

groovyでアイスクリーム形を描画する

groovyでアイスクリーム形を描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

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


出力画像(sample797a.png)
groovyで描画したアイスクリーム

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

関連項目
groovyで魚型を描画する
groovyでイルカの形を描画する
SVGRendererでアイスクリームを描画する (SVGRendererによる同様の処理)

Thursday, January 15, 2009

JMagickで画像の色を減色する

JMagickで画像の色を減色するには、以下のコードを実行します。


import java.awt.*;
import magick.*;

public class JMagickTest47
{
public static void main(String args[])
throws MagickException
{
/* 画像の色数を減色する */
MagickImage mi = new MagickImage(new ImageInfo("sf.jpg"));
QuantizeInfo qi = new QuantizeInfo();
qi.setColorspace(ColorspaceType.RGBColorspace);
/* ディザあり */
qi.setDither(1);
/* 色数 */
qi.setNumberColors(32);
qi.setTreeDepth(0);
qi.setMeasureError(0);
mi.quantizeImage(qi);
mi.setFileName("sample748a.gif");
mi.writeImage(new ImageInfo());
}
}


元画像(sf.jpg)


出力画像(sample748a.gif)


関連情報
JMagickまとめ
ImageMagickで画像を減色する (convertコマンドによる同様の処理)
ImageMagickで画像を4色グレースケールの画像に減色する

groovyで画像を紙吹雪のようにばらばらにする

groovyで画像を紙吹雪のようにばらばらにするには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample861a.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 {
shatter(centreX: 0.5, centreY:0.5,
rotation:10, transition: 0.3, tile:10,
iterations:20)
}
}
}


元画像(sf.jpg)


出力画像(sample861a.png)


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

関連項目
groovyで画像に放射ブラーをかける
groovyで画像に編み目模様をつける

Wednesday, January 14, 2009

RMagickで画像を絵画調に変換する

RMagickで画像を絵画調に変換するには、以下のコードを実行します。

require 'RMagick'
include Magick

# 画像を絵画調に変換する
images = Image.read("sf2.jpg")
img2 = images[0].spread(1)
img3 = img2.median_filter(2)
img4 = img3.emboss(0, 1)
img4.write("sample751a.png")

exit

元画像(sf2.jpg)


出力画像(sample751a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで画像を絵画風に変換する (convertコマンドによる同様の処理)

groovyで足型を描画する

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample796a.png", 200, 200){
antialias("on")
footShape( x:0, y:30, width:200, height:140,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}


出力画像(sample796a.png)
groovyで描画した足型

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

関連項目
groovyで魚型を描画する
groovyでイルカの形を描画する
groovyで蝶を描画する
SVGRendererで足形を描画する (SVGRendererでの同様の処理)

Tuesday, January 13, 2009

groovyで画像にスマート・ブラーをかける

groovyで画像にスマート・ブラーをかけるには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample860a.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 {
// なだらかな所にぼかしをかける
smartBlur(threshold:30, hRadius:3, vRadius:3)
}
}
}


元画像(sf.jpg)


出力画像(sample860a.png)
groovyでスマート・ブラーをかけた画像

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

関連項目
groovyで画像をさまざまなパターンで塗りつぶす
groovyで画像に水面の波紋のような効果をかける

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>sample737(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 画像を縮小、回転させて背景画像と重ねあわせる */
$im = new Imagick("sf.jpg");
/* 縦横1/2にリサイズ */
$im->resizeImage($im->getImageWidth()/2,
$im->getImageHeight()/2, imagick::FILTER_MITCHELL, 1);
/* 生じるスペースの部分に透明を指定して画像を回転 */
$im->rotateImage('none', -20);
$im2 = new Imagick("sf2.jpg");
$im2->compositeImage($im, Imagick::COMPOSITE_DEFAULT, 170, 10, Imagick::CHANNEL_ALL);

$im2->writeImage('sample737a.png');

$im2->destroy();
$im->destroy();
?>
<img src="sample737a.png" />

</body>
</html>


元画像1(sf.jpg)


元画像2(sf2.jpg)


出力画像(sample737a.png)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.4

関連項目
ImageMagickとPHPで画像を半透明にして重ね合わせる
ImageMagickとPHPで、画像に半透明角丸四角の枠をつける

Monday, January 12, 2009

JMagickでタイルパターンの文字列を描画する

JMagickでタイルパターンの文字列を描画するには、以下のコードを実行します。


import java.awt.*;
import magick.*;

public class JMagickTest46
{
public static void main(String args[])
throws MagickException
{
/* タイルパターンの文字列を描画する */
ImageInfo ii = new ImageInfo("xc:#fad759");
ii.setSize("300x80");
DrawInfo di = new DrawInfo(ii);
/* フォント指定(パスは環境によって変えてね) */
// di.setFont("c:\\winnt\\fonts\\msgothic.ttc");
di.setFont("Tahoma");
/* ポイントサイズ指定 */
di.setPointsize(50);
/* パターン設定指定 */
MagickImage tile = new MagickImage(
new ImageInfo("pattern1.gif")
);
di.setTile(tile);
/* Gravity設定 */
di.setGravity(GravityType.NorthWestGravity);
/* 位置指定 */
di.setGeometry("+5+0");
/* テキスト設定 */
di.setText("ImageMagick");
MagickImage mi = new MagickImage(ii);
mi.annotateImage(di);
mi.setFileName("sample747a.jpg");
/* jpegのqualityを90に設定して保存 */
ImageInfo oii = new ImageInfo();
oii.setQuality(90);
mi.writeImage(oii);
}
}


パターン画像(pattern1.gif)


出力画像(sample747a.jpg)


関連情報
JMagickまとめ

groovyで魚型を描画する

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


import groovy.swing.j2d.*

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


出力画像(sample795a.png)
groovyで描画した魚型

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

Sunday, January 11, 2009

ImageMagickで横方向に擦れたような半透明画像に変換する

ImageMagickで横方向に擦れたような半透明画像に変換するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.4-Q16

%im%\convert.exe -size 200x200 xc:none -fill white -draw "roundrectangle 20,20,180,180,10,10" -matte -channel rgba -fx "(j%%4<3&&r!=0)?p*0.7:p*0.3" -spread 5 -motion-blur 0x10+0 -motion-blur 0x10+180 -matte -channel rgba sf.jpg -compose src_in -composite sample750a.png

元画像(sf.jpg)


出力画像(sample750a.png)


関連項目
ImageMagickで不規則な筋状の画像を生成する
ImageMagickで、文字列にモーションブラーをかける

groovyで画像をさまざまなパターンで塗りつぶす

groovyで画像をさまざまなパターンで塗りつぶすには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample859a.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 {
smear(shape:smearLines,
density:0.8, distance:8, angle:10)
}
}

}
gr.renderToFile("sample859b.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 {
smear(shape:smearCrosses,
density:0.8, distance:8, angle:10)
}
}

}
gr.renderToFile("sample859c.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 {
smear(shape:smearCircles,
density:0.8, distance:8, angle:10)
}
}

}
gr.renderToFile("sample859d.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 {
smear(shape:smearSquares,
density:0.8, distance:8, angle:10)
}
}

}


元画像(sf.jpg)


出力画像1(sample859a.png):指定の角度の線で塗りつぶし


出力画像2(sample859b.png):十字で


出力画像3(sample859c.png):円で塗りつぶし


出力画像4(sample859d.png):四角で塗りつぶし


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

関連項目
groovyで画像にスタンプフィルタをかける
groovyで画像を感光させたように加工する
groovyで画像を2値化する