Saturday, March 07, 2009

RMagickで画像に光が差し込んだような効果をつける

RMagickで画像に光が差し込んだような効果をつけるには、以下のコードを実行します。

require 'RMagick'
include Magick

# 画像に光が差し込んだような効果をつける
images = ImageList.new("sf.jpg")
images2 = ImageList.new
sx = images.columns*Math.cos(Math::PI*10/180)
images2.read("plasma:fractal"){
self.size = (images.columns+sx).to_s() + "x" + images.rows.to_s()
}
images2.alpha = ActivateAlphaChannel
# 画面の上1/3まで光が差し込む
images2[0] = images2.fx("h/3>j?p*(h/3-j)/(h/3):0", DefaultChannels)
images2[0].colorspace = GRAYColorspace
images2[0] = images2.motion_blur(70,50,270)
# 光を傾けて、元画像の大きさで切り取り
images2[0] = images2.shear(10, 0).crop(EastGravity, sx, 0,
images.columns, images.rows).normalize()
images2[0] = images2.fx("r*0.4", AlphaChannel)

images.composite(images2, 0, 0, PlusCompositeOp).write("sample901a.png")
exit

元画像(sf.jpg)


出力画像(sample901a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで、写真に光が差し込んだような効果をつける (convertコマンドによる同様の処理)

groovyでcellularフィルタを使用する

groovyでcellularフィルタを使用するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample847a.png", 200, 200){
antialias("on")
rect( x: 0, y: 0, width: 200, height: 200,
borderColor: no){
filters {
cellular(randomness:1, turbulence: 1,
distancePower: 0.7)
}
}
}


出力画像(sample847a.png)



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

関連項目
groovyで画像にイコライズフィルターをかける

Friday, March 06, 2009

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

RMagickで横方向に擦れたような半透明画像に変換するには、以下のコードを実行します。

require 'RMagick'
include Magick

# 余白
padx = 20
pady = 20
# 角丸
rx = 10
ry = 10

images = ImageList.new("sf2.jpg")
images.alpha = ActivateAlphaChannel
images2 = ImageList.new
# 元画像と同じ大きさの透明なイメージを作成
images2[0] = Image.new(images.columns, images.rows){
self.background_color = "black"
}
images2[0].alpha = ActivateAlphaChannel
dr = Draw.new
# 描画色
dr.fill = "white"
# 角丸四角
dr.roundrectangle(padx,pady,
images.columns-1-padx, images.rows-1-pady, rx, ry)
dr.draw(images2);

# 横ストライプ&半透明
images2[0] = images2.fx("(j%4<3&&r!=0)?p*0.7:p*0.3")
# spreadでばらして、モーションブラー
images2[0] = images2.spread(5).motion_blur(0,10,0).motion_blur(0,10,180)
images2[0] = images2.fx("r", AlphaChannel)

images.composite(images2, 0, 0, DstInCompositeOp).write("sample900a.png")
exit


元画像(sf2.jpg)


出力画像(sample900a.pn)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで横方向に擦れたような半透明画像に変換する (convertコマンドによる同様の処理)

groovyで画像を角丸四角にする

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample822a.png", 200, 200){
antialias("on")
rect( x: 10, y: 10, width: 180, height: 180,
arcWidth: 20, arcHeight:20, borderColor: no){
texturePaint(x: 0, y: 0, file: 'sf.jpg' )
}
}


元画像(sf.jpg)


出力画像(sample822a.png)
groovyで角丸四角にした画像

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

関連項目
groovyで画像に着色する

Thursday, March 05, 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>sample896(ImageMagick6.4.8)</title>
</head>
<body>
<?php
/* 画像をn角形で切り取る */
$numpoints = 5;
/* 半径 */
$rad = 90;
/* 中心 */
$cx = 100;
$cy = 100;

/* n角形をポリゴンで描画 */
$angle = 270;
for($li=0;$li<$numpoints;$li++){
$points[] = array('x' => $cx+cos(deg2rad($angle))*$rad, 'y' => $cy+sin(deg2rad($angle))*$rad);
$angle += 360/$numpoints;
}
$im = new Imagick("sf.jpg");
$im2 = new Imagick();
$im2->newImage($im->getImageWidth(), $im->getImageHeight(), "none");
$im2->setImageMatte(true);
$idraw = new ImagickDraw();
$idraw->polygon($points);
$im2->drawImage($idraw);

$im2->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);
$im2->writeImage('sample896a.png');
$idraw->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample896a.png" /><br />

</body>
</html>


元画像(sf.jpg)


出力画像(sample896a.png)


関連項目
ImageMagickとPHPで凹んだ角丸四角形に画像を切り取る

groovyで画像に着色する

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample848a.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 {
colorTint(mixColor: color("#d0ffc0"), mixValue:0.3)
}
}
}


元画像(sf.jpg)


出力画像(sample848a.png)
groovyで着色処理した画像

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

関連項目
groovyで画像の上に半透明の文字列を描画する

Wednesday, March 04, 2009

RMagickでランダムな筋模様がだんだんと消えていく画像を生成する

RMagickでランダムな筋模様がだんだんと消えていく画像を生成するには、以下のコードを実行します。

require 'RMagick'
include Magick

images = ImageList.new
images.read("plasma:fractal"){
self.size = "200x10"
}
images[0].colorspace = GRAYColorspace
images[0] = images.extent(200,200).motion_blur(70,150,270)
images.write("sample898a.png")
exit

出力画像(sample898a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickでランダムな筋がだんだん消えていく模様を生成する

ImageMagickで画像を滲んだ感じに変換する

ImageMagickで画像を滲んだ感じに変換するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.4-Q16
%im%\convert.exe sf.jpg -colorspace gray ( sf.jpg -spread 4 -blur 0x1 ) -compose overlay -composite sample886a.png

元画像(sf.jpg)


出力画像(sample886a.png)


関連項目
ImageMagickとPHPで画像を滲んだ感じに変換する (Imagickでの同様の処理)
RMagickで画像を滲んだ感じに変換する

groovyで画像をぼかす:その2

groovyで画像をぼかすには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample821a.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(){ blur() }
}
}


元画像(sf.jpg)


出力画像(sample821a.png)
groovyでぼかし処理をした画像

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

関連項目
groovyで画像をぼかす

Tuesday, March 03, 2009

im4javaで画像を上下反転・左右反転させる

im4javaで画像を上下反転・左右反転させるには、以下のコードを実行します。


import org.im4java.core.*;

// im4java-0.96.0-bin.tar.bz2を解凍してim4java-0.96.0.jarはclasspathに通す
public class Im4java4
{
public static void main(String args[])
throws Exception
{
try
{
// 画像を上下反転
IMOperation op = new IMOperation();
op.addImage();
op.flip();
op.addImage();

// 画像を左右反転
IMOperation op2 = new IMOperation();
op2.addImage();
op2.flop();
op2.addImage();

// ConvertCmd convert = new ConvertCmd();
ImageCommand convert = new WindowsConvertCmd();
convert.run(op, "sf.jpg", "sample921a.png");
convert.run(op2, "sf.jpg", "sample921b.png");


}
catch(CommandException cex)
{
System.out.println(cex.getErrorText());
cex.printStackTrace();
}
}

// im4java 0.96
static class WindowsConvertCmd extends ImageCommand
{
public WindowsConvertCmd()
{
setCommand("cmd");
setCommand("/c");
setCommand("convert");
/* another way
setCommand("C:\\Program Files\\ImageMagick-6.4.9-Q16\\convert");
*/
}
}

}


元画像(sf.jpg)


出力画像1(sample921a.png)


出力画像2(sample921b.png)


関連情報
im4javaのまとめ

groovyでシェイプストロークを使用して図形を描画する

groovyでシェイプストロークを使用して図形を描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample885a.png", 200, 200){
antialias("on")
dolphinShape( x:0, y:20, width:200, height:160,
borderColor: color("#aaccff"),
){
shapeStroke(advance:20){
star(cx:10, cy:10, or:10, ir:7, count:5)
rect(x:5, y:5, height:10, width:10)
}
}
}


出力画像(sample885a.png)
groovyでシェイプストロークを使用して描画したイルカ

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

関連項目
groovyで放射ストライプを描画する
SVGRendererでシェイプストロークを使用して図形を描画する (SVGRendererでの同様の処理)

groovyで画像のエッジ抽出をする

groovyで画像のエッジ抽出をするには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample849a.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 {
detectEdges()
}
}
}


元画像(sf2.jpg)


出力画像(sample849a.png)
groovyでエッジ抽出した画像

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

関連項目
Java2DとJava Image Filters(pixels)を使用してエッジ抽出をおこなう (Java Image Filtersによる同様の処理)

Monday, March 02, 2009

RMagickで画像を角丸四角に切り取って立体的にする

RMagickで画像を角丸四角に切り取って立体的にするには、以下のコードを実行します。

require 'RMagick'
include Magick

# 余白
padx = 10
pady = 10
# 角丸
rx = 20
ry = 20

images = ImageList.new("sf.jpg")
images.alpha = ActivateAlphaChannel

images2 = ImageList.new
images2.new_image(images.columns, images.rows){
self.background_color = "none"
}
dr = Draw.new
dr.fill = "white"
dr.roundrectangle(padx,pady,
images.columns-1-padx, images.rows-1-pady, rx, ry)
dr.draw(images2);
# 描画した角丸四角で切り取り
img = images.composite(images2, 0, 0, DstInCompositeOp);

# 角丸四角図形を立体的にする
img2 = images2.shade(true,135,23)
img2 = img2.blur_channel(0, 3, ChannelType::AllChannels).normalize().contrast(true).contrast(true)

# overlayで重ね合わせ
img.composite(img2, 0, 0, OverlayCompositeOp).write("sample894a.png")
exit

元画像(sf.jpg)


出力画像(sample894a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
RMagickで画像を高低差のあるタイルに貼り付けたように加工する
RMagickで画像を立体的なタイル風に変換する

groovyで画像の上に半透明の文字列を描画する

groovyで画像の上に半透明の文字列を描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample820a.png", 200, 200){
antialias("on")
image(file: "sf.jpg")
font(new java.awt.Font('Tahoma', java.awt.Font.BOLD, 26))
text( x:10, y:100,
text: "San Francisco",
fill: color("#ffffff").derive(alpha: 0x80),
borderColor: color("#ffffff").derive(alpha: 0xf0),
borderWidth: 1
)
}


元画像(sf.jpg)


出力画像(sample820a.png)


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

関連項目
groovyで円状に文字列を描画する
SVGRendererで半透明の文字列を描画する (SVGRendererでの同様の処理)

Sunday, March 01, 2009

groovyで揺れのあるストロークを使用して図形を描画する

groovyで揺れのあるストロークを使用して図形を描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample884a.png", 200, 200){
antialias("on")
dolphinShape( x:0, y:20, width:200, height:160,
fill: color("#cceeff"),
borderColor: color("#aaccff")
){
wobbleStroke(amplitude:3, detail:2)
}
}


出力画像(sample884a.png)


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

関連項目
groovyでイルカの形を描画する

groovyで画像にイコライズフィルターをかける

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample850a.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 {
equalize()
}
}
}


元画像(sf2.jpg)


出力画像(sample850a.png)


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

関連項目
groovyで円状に文字列を描画する