Saturday, June 20, 2009

Structure SynthとSunflowのインストールと連携

Structure SynthとSunflowのインストールと連携は以下の手順を実行します。

1.Structure Synthのdownload
http://structuresynth.sourceforge.net/download.php
上記URLからStructure-Synth-Windows_Binary-v0.9.5.zipを
ダウンロード後、適当なパスに解凍します。

2.Sunflowのダウンロード
http://sunflow.sourceforge.net/index.php
上記URLからsunflow-bin-v0.07.2をダウンロード後、
適当なパスに解凍します。

3.Sunflowバッチファイル変更
解凍したsunflowに含まれるsunflow.batを開き、
@set javadir="c:\program files\java\jdk1.6.0"
となっている行を環境に合わせて変更します。
JDK6 Update 13の場合は、以下のように変更します。
@set javadir="c:\program files\java\jdk1.6.0_13"

4.Structure Synthの起動とサンプルの実行
StructureSynth.exeをダブルクリックして起動し、
Examples -> Arc Sphere.esをメニューから選択します。
再生ボタンのようなアイコンをクリックします。



5.画像の保存
Render -> Save as Bitmap...メニューを選択して
表示された画像を保存できます。



6.sunflowシーンファイルの保存
Render -> Template Render to File
-> Sunflow-Colored.rendertemplateメニューを選択し
シーンファイルを保存します。
ファイル名の拡張子には.scを指定します。(ArchSphere.scなど)

7.コマンドプロンプトなどからsunflow.batを実行します。
File -> Openメニューを選択して、先ほど保存したシーンファイルを
開きます。Imageウインドウ内のRenderボタンをクリックします。



8.イメージの保存
Image -> Save Imageメニューを選択してレンダリングした画像を
保存できます。

JOGLでワイヤーフレームのティーポットを描画する

JOGLでワイヤーフレームのティーポットを描画するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample9
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);

gl.glClear(GL.GL_COLOR_BUFFER_BIT);

gl.glPushMatrix();
// X軸回転
gl.glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(45.0f, 0.0f, 1.0f, 0.0f);
// ワイヤーフレームでティーポットを描画
glut.glutWireTeapot(1.5f);
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1167a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1167a.png)
JOGLで描画したワイヤーフレームのティーポット


動作環境
JDK6 Upadate13, JOGL 1.1.1

SWFRendererで円を描画する

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


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1038a.swf", 200, 200){
circle( cx:100, cy:100, radius:80,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1038a.swf)
SWFRendererで描画した円

動作環境
Groovy1.6.0, JDK1.6 Update12

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

im4javaで英文字列を描画する

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


import java.util.*;
import org.im4java.core.*;
import org.im4java.process.*;

// im4java-0.98.0-bin.tar.bz2を解凍してim4java-0.98.0.jarはclasspathに通す
public class Im4java26
{
public static void main(String args[])
throws Exception
{
try
{
// ConvertCmd convert = new ConvertCmd();
ImageCommand convert = new WindowsConvertCmd();

IMOperation op = new IMOperation();
op.size(200, 200);
op.addImage("xc:white");
op.font("Tahoma");
op.pointsize(50);
op.gravity("center");
op.fill("#7799ff");
op.draw("text 0,0 'im4java'");
op.addImage("sample1120a.png");
convert.run(op);
}
catch(CommandException cex)
{
System.out.println(cex.getErrorText());
cex.printStackTrace();
}
}

// im4java 0.98
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");
*/
}
}
}


出力画像(sample1120a.png)
im4javaで描画した英文字列

関連情報
im4javaのまとめ

SWFRendererで四角を描画する

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

import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1029a.swf", 200, 200){
rect( x:50, y:20, width:100, height:160,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}

出力SWF(sample1029a.swf)


関連項目
groovyで四角を描画する

Friday, June 19, 2009

JOGLでワイヤーフレームの8面体を描画する

JOGLでワイヤーフレームの8面体を描画するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample6
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);

gl.glClear(GL.GL_COLOR_BUFFER_BIT);

gl.glPushMatrix();
// X軸回転
gl.glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(30.0f, 0.0f, 1.0f, 0.0f);
// ワイヤーフレームの8面体を描画
glut.glutWireOctahedron();
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1164a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1164a.png)
JOGLで描画したワイヤフレームの8面体

groovyで任意の2色のグラデーションでバースト状に塗りつぶす

groovyで任意の2色のグラデーションでバースト状に塗りつぶすには、以下のコードを実行します。


import groovy.swing.j2d.*
import com.jhlabs.image.*

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


出力画像(sample994a.png)
groovyで任意の2色のバースト状グラデーションで塗りつぶした画像

動作環境
Groovy1.6.0, JDK1.6 Update12

関連項目
groovyでバースト状にシェイプを塗りつぶす
groovyで図形をグラデーションで塗りつぶす
groovyでストロークにグラデーションをかける
groovyで図形を虹色グラデーションで塗りつぶす

Thursday, June 18, 2009

ImageMagickとPHPで画像を回転させる - その2

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>sample1127(ImageMagick6.5.2)</title>
</head>
<body>
<?php
// 画面の中央で回転
$im = new Imagick("sf.jpg");
$im->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$im->setImageMatte(true);
$args1 = array(45);
//$im->distortImage(Imagick::DISTORTION_SCALEROTATETRANSLATE,
// $args1, false);
// ScaleRotateTranslateDistortion in distort.h
$im->distortImage(3, $args1, false);
$im->writeImage('sample1127a.png');
$im->destroy();

// 画面の水平方向中央の下端で回転
$im2 = new Imagick("sf.jpg");
$im2->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$im2->setImageMatte(true);
$args2 = array($im2->getImageWidth()/2,
$im2->getImageHeight(),1,45);
//$im->distortImage(Imagick::DISTORTION_SCALEROTATETRANSLATE,
// $args2, false);
// ScaleRotateTranslateDistortion in distort.h
$im2->distortImage(3, $args2, false);
$im2->writeImage('sample1127b.png');
$im2->destroy();
?>
<img src="sample1127a.png" /><br />
<img src="sample1127b.png" /><br />

</body>
</html>


元画像(sf.jpg)


出力画像1(sample1127a.png):画面中央で回転
Imagickで画面中央を中心として回転させた画像

出力画像2(sample1127b.png):画面の水平方向中央の下端で回転
Imagickで画像下中央を中心として回転させた画像

関連項目
ImageMagickとPHPで画像を回転させる

groovyでSVGをPNGにレンダリングする

groovyでSVGをPNGにレンダリングするには、以下のコードを実行します。


import java.lang.ref.*
import java.awt.*
import java.awt.image.*
import javax.imageio.*
import org.apache.batik.bridge.*
import org.apache.batik.dom.svg.*
import org.apache.batik.util.*
import org.w3c.dom.svg.*
import org.apache.batik.ext.awt.*;

img = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB)
parser = XMLResourceDescriptor.getXMLParserClassName()
SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser)
svgf = new File("./masked-image-dropshadow.svg");
URI furi = svgf.toURI();
svgd = factory.createDocument(furi.toString());
userAgentAdapter = new UserAgentAdapter();
bridgeContext = new BridgeContext(userAgentAdapter);
builder = new GVTBuilder();
rsvgn = builder.build(bridgeContext, svgd)
Graphics2D g2d = img.getGraphics()
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON)
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR)
//g2d.getRenderingHints().remove(RenderingHintsKeyExt.KEY_BUFFERED_IMAGE);
g2d.setRenderingHint(RenderingHintsKeyExt.KEY_BUFFERED_IMAGE, new WeakReference(img));
rsvgn.paint(g2d);
g2d.dispose();
ImageIO.write(img, "png", new File("sample993a.png"));


元画像(sf.jpg)


入力SVG(masked-image-dropshadow.svg)

<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="300" height="300">

<defs>
<mask id="mask1" maskUnits="userSpaceOnUse"
x="0" y="0" width="300" height="300">
<rect x="50" y="50" width="200" height="200"
rx="20" ry="20"
style="fill:#ffffff; "/>
</mask>
<filter id="gbf">
<feGaussianBlur in="SourceAlpha" stdDeviation="4" result="shadow"/>
<feOffset in="shadow" dx="4" dy="4" result="shadow2"/>
<feComposite in="SourceGraphic" in2="shadow2" operator="over"/>
</filter>
</defs>

<g filter="url(#gbf)">
<image x="50" y="50" width="200px" height="200px"
xlink:href="sf.jpg" mask="url(#mask1)" >
<title>sf.jpg</title>
</image>
</g>
<!--mask="url(#mask1)" -->
</svg>


出力画像(sample993a.png)
groovyでSVGをPNGに変換した画像

Wednesday, June 17, 2009

ImageMagickで手書きで塗りつぶしたような文字列を描画する

ImageMagickで手書きで塗りつぶしたような文字列を描画するには、以下のバッチファイルを実行します。

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

%im%\convert.exe -size 200x200 xc:gray25 -alpha activate -sketch 0x10+135 ( -size 200x200 xc:none -font "Tahoma" -pointsize 120 -gravity center -annotate 0 IM ) -compose dst_in -composite sample1131a.png

出力画像(sample1131a.png)



関連項目
ImageMagickで光沢のある文字列のプレートを描画する
ImageMagickで透明な文字列を描画する - その2
ImageMagickで手書き風の文字列を描画する

SVGRendererで図形を回転させる

SVGRendererで図形を回転させるには、以下のコードを実行します。


import groovy.swing.j2d.svg.*

gr = new SVGRenderer()
gr.renderToFile("sample992a.svg", 200, 200){
butterflyShape( x: 0, y: 0, width: 200, height: 200,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
){
transformations{
rotate(angle:45, x:100, y:100)
}
}
}


出力SVG(sample992a.svg)をPNGでレンダリングした画像
SVGRendererで図形を回転させた画像


動作環境
Groovy1.6.0, JDK1.6 Update12

関連項目
groovyで図形を回転させる (GraphicsRendererでの同様の処理)

Tuesday, June 16, 2009

RMagickで文字列画像に半透明の濃淡をつける

RMagickで文字列画像に半透明の濃淡をつけるには、以下のコードを実行します。


require 'RMagick'
include Magick

images = ImageList.new
images.new_image(200, 40){
self.background_color = "none"
}
dr = Draw.new
dr.fill = "#aaccf8"
# フォント
dr.font = "Tahoma"
# ポイントサイズ
dr.pointsize = 30
dr.gravity = CenterGravity
dr.text(0, 0, "ImageMagick")
dr.draw(images)
images[0] = images.blur_channel(0,1,AllChannels)

images2 = ImageList.new()
images2.read("plasma:fractal"){
self.size = "200x40"
}
images2.alpha = ActivateAlphaChannel
images2.colorspace = GRAYColorspace
images2[0] = images2.modulate(0.8, 1, 1).
blur_channel(0,3,AllChannels)
images2[0] = images2.fx("r", AlphaChannel)
images.composite(images2, CenterGravity, 0, 0,
DstOutCompositeOp).write("sample1146a.png")


出力画像(sample1146a.png)


動作環境
ruby1.8.6, rmagick2.9.0

関連項目
ImageMagickで文字画像に半透明の濃淡をつける (convertコマンドでの同様の処理)

im4javaで画像を4色グレースケール画像に変換する

im4javaで画像を4色グレースケール画像に変換するには、以下のコードを実行します。


import java.util.*;
import org.im4java.core.*;
import org.im4java.process.*;

// im4java-0.98.0-bin.tar.bz2を解凍してim4java-0.98.0.jarはclasspathに通す
public class Im4java25
{
public static void main(String args[])
throws Exception
{
try
{
// ConvertCmd convert = new ConvertCmd();
ImageCommand convert = new WindowsConvertCmd();

IMOperation op = new IMOperation();
op.addImage("sf.jpg");
op.colorspace("gray").colors(4);
op.addImage("sample1119a.png");
convert.run(op);
}
catch(CommandException cex)
{
System.out.println(cex.getErrorText());
cex.printStackTrace();
}
}

// im4java 0.98
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)


出力画像(sample1119a.png)


関連情報
im4javaのまとめ

im4javaで画像をグレースケールに変換する

ImageMagickで画像を4色グレースケールの画像に減色する (convertコマンドでの同様の処理)

SVGRendererで透明な文字列を描画する

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


import groovy.swing.j2d.svg.*

gr = new SVGRenderer()
gr.renderToFile("sample991a.svg", 200, 200){
image(file: "sf.jpg")
font(new java.awt.Font('Tahoma', java.awt.Font.BOLD, 110))
subtract( borderColor: no, fill: 'black', opacity:0.5){
rect(x:20, y:20, width: 160, height: 160)
text( x:30, y:60, text: "SF")
}
}


元画像(sf.jpg)


出力SVG(sample991a.svg)をPNGにレンダリングした画像
SVGRendererで透明な文字列を描画した画像

動作環境
Groovy1.6.0, JDK1.6 Update12

関連項目
groovyで透明な文字列を描画する (GraphicsRendererでの同様の処理)

Monday, June 15, 2009

SVGRendererで文字列にドロップシャドウをつける

SVGRendererで文字列にドロップシャドウをつけるには、以下のコードを実行します。


import groovy.swing.j2d.svg.*

gr = new SVGRenderer()
gr.renderToFile("sample990a.svg", 200, 200){
image(file: "SF.JPG")
font(new java.awt.Font('Tahoma', java.awt.Font.BOLD, 26))
text( x:10, y:80,
text: "San Francisco",
fill: color("#ffffff"),
borderColor: no
){
filters {
dropShadow()
}
}
}


元画像(sf.jpg)


出力画像(sample990a.svg)
SVGRendererで文字列にドロップシャドウをつけた画像

動作環境
Groovy1.6.0, JDK1.6 Update12

関連項目
groovyで画像の上に影付き文字列を描画する (GraphicsRendererでの同様の処理)

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>sample1113(ImageMagick6.5.2)</title>
</head>
<body>
<?php
$im = new Imagick();
$im->newImage(200,200,"none");

$idraw = new ImagickDraw();
$idraw->setFillColor("none");
$idraw->setStrokeColor("#99bbff");
$idraw->setStrokeWidth(20);
/* ラインキャップの種類を指定 */
$idraw->setStrokeLineCap(Imagick::LINECAP_ROUND);
/* ラインジョインの種類を指定 */
$idraw->setStrokeLineJoin(Imagick::LINEJOIN_ROUND);

$points[] = array('x' => 20, 'y' => 180);
$points[] = array('x' => 100, 'y' => 20);
$points[] = array('x' => 180, 'y' => 180);
$idraw->polyline($points);
$im->drawImage($idraw);

$im->writeImage('sample1113a.png');
$idraw->destroy();
$im->destroy();
?>
<img src="sample1113a.png" /><br />

</body>
</html>


出力画像(sample1113a.png)
Imagickでラインキャップ・ラインジョインを設定した画像

JOGLでワイヤーフレームの20面体を描画する

JOGLでワイヤーフレームの20面体を描画するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample5
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);

gl.glClear(GL.GL_COLOR_BUFFER_BIT);

gl.glPushMatrix();
// X軸回転
gl.glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(20.0f, 0.0f, 1.0f, 0.0f);
// ワイヤーフレームの20面体を描画する
glut.glutWireIcosahedron();
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1163a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1163a.png)
JOGLで描画したワイヤーフレームの20面体

Sunday, June 14, 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>sample1126(ImageMagick6.5.2)</title>
</head>
<body>
<?php
/* */
$cx=100;
$cy=100;
$rad=10;
$dr = 35;
$noc = 6;
$nol = 2;

$im = new Imagick();
$im->newImage(200, 200, "white");
$idraw = new ImagickDraw();
$idraw->setFillColor("#bbddff");
$idraw->ellipse($cx,$cy,$rad,$rad,0,360);
$sr = $dr;
for($li=0;$li<$nol;$li++){
$pr = 360/$noc;
for($lc=0;$lc<$noc;$lc++){
$px = $cx + cos(pi()*$pr*$lc/180)*$sr;
$py = $cy + sin(pi()*$pr*$lc/180)*$sr;
$idraw->ellipse($px,$py,$rad,$rad,0,360);
}
$sr += $dr;
$noc *=2;
}
$im->drawImage($idraw);
$im->writeImage('sample1126a.png');
$idraw->destroy();
$im->destroy();
?>
<img src="sample1126a.png" /><br />

</body>
</html>


出力画像(sample1126a.png)
Imagickで複数の円を放射状に描画した画像

SVGRendererでテクスチャを繰り返し描画する

SVGRendererでテクスチャを繰り返し描画するには、以下のコードを実行します。


import groovy.swing.j2d.svg.*

gr = new SVGRenderer()
gr.renderToFile("sample989a.svg", 200, 200){
background(color: color("white"))
rect(x:0, y:0, width: 200,
height: 200, borderColor:no){
texturePaint(x: 0, y: 0, file: "flower1.png" )
}
}


元画像(flower1.png)


出力SVG(sample989a.svg)をfirefoxで表示させた画面


動作環境
Groovy1.6.0, JDK1.6 Update12