Saturday, June 06, 2009

RMagickで放射グラデーションを描画する

RMagickで放射グラデーションを描画するには、以下のコードを実行します。


require 'RMagick'
include Magick

# env: ruby1.8.6, rmagick2.9.0

images = ImageList.new()
images.read("radial-gradient:#7799ff-#ffffff"){
self.size = "200x200"
}
images.write("sample1123a.png")

exit


出力画像(sample1123a.png)
RMagickで描画した放射グラデーション

動作環境
ruby1.8.6, rmagick2.9.0

関連項目
RMagickで虹色グラデーションの文字列を描画する
Rmagickで画像を木炭画調に変換してグラデーションを適用する

SVGRendererで背景色を指定する

SVGRendererで背景色を指定するには、以下のコードを実行します。


import groovy.swing.j2d.svg.*

gr = new SVGRenderer()
gr.renderToFile("sample981a.svg", 200, 200){
background(color: color("#88aadd"))
fishShape( x:0, y:40, width:200, height:120,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}


出力SVG(sample981a.svg)をPNGにレンダリングした画像
SVGRendererで背景色を指定した画像

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

Friday, June 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>sample1108(ImageMagick6.5.2)</title>
</head>
<body>
<?php
$im = new Imagick("sf.jpg");
$im2 = $im->clone();
$im2->setImageMatte(true);
$im3 = $im2->fxImage("lightness<0.3?p:0", Imagick::CHANNEL_ALPHA);
$im3->modulateImage(160, 100, 100);
$im->compositeImage($im3, Imagick::COMPOSITE_OVER,
0, 0, Imagick::CHANNEL_ALL);
$im->writeImage('sample1108a.png');
$im3->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample1108a.png" /><br />

</body>
</html>


元画像(sf.jpg)


出力画像(sample1108a.png)


関連項目
ImageMagickで画像の暗い部分を明るくする (convertコマンドでの同様の処理)

SVGRendererでストロークにグラデーションをかける

SVGRendererでストロークにグラデーションをかけるには、以下のコードを実行します。


import groovy.swing.j2d.svg.*

gr = new SVGRenderer()
gr.renderToFile("sample980a.svg", 200, 200){
rect( x:10, y:10, width:180, height:180,
arcWidth: 20, arcHeight:20,
fill: color("#fffff0"),
borderWidth: 6
){
borderPaint(){
gradientPaint( x1: 0, y1: 0, x2: 0, y2: 200,
color1: "#ffffe0", color2: "#f0d090")
}
}
}


出力SVG(sample980a.svg)をPNGにレンダリングした画像
SVGRendererでストロークにグラデーションをかけた画像

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

関連項目
SVGRendererでグラデーションのかかった星を描画する (グラデーションで塗りつぶす場合はこちら)
groovyでストロークにグラデーションをかける (GraphicsRendererでの同様の処理)

Thursday, June 04, 2009

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 Im4java22
{
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.shear(10.0,0.0);
op.addImage("sample1116a.png");
convert.run(op);

op = new IMOperation();
op.addImage("sf.jpg");
op.shear(0.0,10.0);
op.addImage("sample1116b.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)


出力画像1(sample1116a.png)
im4javaで水平方向に傾けた画像

出力画像2(sample1116b.png)
im4javaで垂直方向に傾けた画像

関連情報
im4javaのまとめ

SVGRendererでグラデーションのかかった星を描画する

SVGRendererでグラデーションのかかった星を描画するには、以下のコードを実行します。


import groovy.swing.j2d.svg.*

gr = new SVGRenderer()
gr.renderToFile("sample979a.svg", 200, 200){
star( cx:100, cy:100, count:5, ir:40, or:90,
borderColor: color("#d0b070"),
borderWidth: 2
){
gradientPaint( x1: 0, y1: 0, x2: 0, y2: 200,
color1: "#ffffe0", color2: "#f0d090")
}
}


出力SVG(sample979a.svg)をPNGにレンダリングした画像
SVGRendererで描画したスター

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

関連項目
groovyで図形をグラデーションで塗りつぶす (GraphicsRendererでの同様の処理)

Wednesday, June 03, 2009

JOGLでワイヤーフレームの円錐を描画する

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


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

public class JoglSample2
{
// 出力画像サイズ
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, -15.0f);

gl.glClear(GL.GL_COLOR_BUFFER_BIT);

gl.glPushMatrix();
// X軸回転
gl.glRotatef(-60.0f, 1.0f, 0.0f, 0.0f);
// ワイヤーフレームの円錐を描画
glut.glutWireCone(2.0f, 2.5f, 16, 4);
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("sample1160a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1160a.png)
JOGLで描画したワイヤーフレームの円錐

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>sample1107(ImageMagick6.5.2)</title>
</head>
<body>
<?php
/* 画像サイズ */
$sx=200;
$sy=200;
/* 放射ストライプの中心 */
$cx=70;
$cy=150;
/* ストライプ数 */
$rays=24;
$sr=360/$rays;
/* 背景色 */
$bc="white";
/* ストライプ色 */
$sc="#99bbff";

$im = new Imagick();
$im->newImage($sx, $sy, $bc);
$idraw = new ImagickDraw();
$idraw->setFillColor($sc);
for($lc=0;$lc<$rays;$lc++){
$points[] = array(
'x' => $cx, 'y' => $cy);
$points[] = array(
'x' => $cx+cos(pi()*$sr*$lc/180)*$sx,
'y' => $cy+sin(pi()*$sr*$lc/180)*$sy);
$points[] = array(
'x' => $cx+cos(pi()*($sr*$lc+$sr/2)/180)*$sx,
'y' => $cy+sin(pi()*($sr*$lc+$sr/2)/180)*$sy);
$idraw->polygon($points);
}
$im->drawImage($idraw);
$im->writeImage('sample1107a.png');
$idraw->destroy();
$im->destroy();
?>
<img src="sample1107a.png" /><br />

</body>
</html>


出力画像(sample1107a.png)
Imagickで描画した放射ストライプ

SVGRendererで円弧を描画する

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


import groovy.swing.j2d.svg.*

gr = new SVGRenderer()
gr.renderToFile("sample978a.svg", 200, 200){
arc( x: 0, y: 0, width: 198, height: 198,
start:0, extent:45,
borderColor: color("#103080"),
borderWidth: 2,
fill: color("#bbddff"),
close: "pie"
)
}


出力SVG(sample978a.svg)をPNGでレンダリングした画像
SVGRendererで描画したパイ

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

関連項目
SVGRendererでグラデーションのかかった星を描画する (図形をグラデーションに塗りつぶす方法)
groovyで円弧を描画する (GraphicsRendererでの同様の処理)

Tuesday, June 02, 2009

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 Im4java21
{
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.background("#bbddff");
op.rotate(15.0);
op.addImage("sample1115a.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)


出力画像(sample1115a.png)
im4javaで回転させた画像

関連情報
im4javaのまとめ

SVGRendererで四隅の角丸を指定して四角を描画する

SVGRendererで四隅の角丸を指定して四角を描画するには、以下のコードを実行します。


import groovy.swing.j2d.svg.*

gr = new SVGRenderer()
gr.renderToFile("sample977a.svg", 200, 200){
roundRect( x:10, y:10, width:180, height:180,
topLeftHeight: 10, topLeftWidth:10,
topRightHeight: 20, topRightWidth:20,
bottomLeftHeight: 30, bottomLeftWidth:30,
bottomRightHeight: 40, bottomRightWidth:40,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}


出力SVG(sample977a.svg)をPNGにレンダリングした画像
SVGRendererで描画した四隅の角丸が異なる四角

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

関連項目
SVGRendererで角丸四角を描画する
SVGRendererでグラデーションのかかった星を描画する (図形をグラデーションで塗りつぶす方法)
groovyで四隅の角丸を指定して四角を描画する (GrapchisRendererでの)

Monday, June 01, 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>sample1106(ImageMagick6.5.2)</title>
</head>
<body>
<?php
/* メッセージ(UTF-8でファイルを保存する) */
$msg = "サンプル";
/* 余白 */
$padx = 20;
$pady = 5;
/* 枠の色 */
$bc = "#d0d0d0ff";
/* 塗りつぶし色 */
$fc = "#00000080";
/* 文字色 */
$tc = "white";

$im = new Imagick();
$idraw = new ImagickDraw();
/* フォント設定 */
$idraw->setFont('C:\\Windows\\Fonts\\MSGOTHIC.TTC');
/* フォントサイズ設定 */
$idraw->setFontSize(30);
/* gravity設定 */
$idraw->setGravity(Imagick::GRAVITY_CENTER);
/* 文字列のサイズ取得 */
$metrics = $im->queryFontMetrics($idraw, $msg);
$im->newPseudoImage($metrics["textWidth"]+$padx*2,
$metrics["textHeight"]+$pady*2, "xc:none");
/* 角丸四角 */
$idraw->setFillColor($fc);
$idraw->setStrokeColor($bc);
$idraw->roundrectangle(0,0,
$metrics["textWidth"]+$padx*2-1,
$metrics["textHeight"]+$pady*2-1,
10,10);
/* 文字色 */
$idraw->setFillColor($tc);
$idraw->setStrokeColor($tc);
$idraw->annotation(0, 0, $msg);

$im->drawImage($idraw);

$im->writeImage('sample1106a.png');

$im2 = new Imagick("sf.jpg");

$im2->compositeImage($im,
Imagick::COMPOSITE_OVER, 20, 100, Imagick::CHANNEL_ALL);
$im2->writeImage('sample1106b.png');

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

</body>
</html>


出力画像1(sample1106a.png)
Imagickで描画した文字列の大きさにフィットする角丸四角

出力画像2(sample1106b.png):重ねあわせ例


関連項目
ImageMagickとPHPで手書き風の円に囲まれた文字を描画する
ImageMagickとPHPでバンド状グラデーションの文字列を描画する
ImageMagickとPHPで、円形のドットの文字列を描画する

SVGRendererでサイを描画する

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


import groovy.swing.j2d.svg.*

gr = new SVGRenderer()
gr.renderToFile("sample976a.svg", 200, 200){
rhinoShape( x:0, y:10, width:200, height:180,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}


出力SVG(sample976a.svg)をPNGにレンダリングした画像
SVGRendererで描画したサイ

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

関連項目
SVGRendererでグラデーションのかかった星を描画する (図形をグラデーションで塗りつぶす方法)
groovyでサイの形を描画する (GraphicsRendererでの同様の処理)

Sunday, May 31, 2009

im4javaで画像のヒストグラムを出力する

im4javaで画像のヒストグラムを出力するには、以下のコードを実行します。


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

// im4java-0.97.0-bin.tar.bz2を解凍してim4java-0.97.0.jarはclasspathに通す
public class Im4java20
{
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.addImage("histogram:sample1086a.png");
convert.run(op);

op = new IMOperation();
op.addImage("sf.jpg");
op.channel("b");
op.addImage("histogram:sample1086b.png");
convert.run(op);
}
catch(CommandException cex)
{
System.out.println(cex.getErrorText());
cex.printStackTrace();
}
}

// im4java 0.97
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(sample1086a.png):RGBヒストグラム
im4javaで出力したヒストグラム

出力画像2(sample1086b.png):青チャンネルのヒストグラム
im4javaで出力した青チャンネルのヒストグラム

関連情報
im4javaのまとめ

ImageMagickで、画像のヒストグラムを生成する (convertコマンドでの同様の処理)

SVGRendererで正多角形を描画する

SVGRendererで正多角形を描画するには、以下のコードを実行します。


import groovy.swing.j2d.svg.*

gr = new SVGRenderer()
gr.renderToFile("sample975a.svg", 200, 200){
regularPolygon( cx:100, cy:100, radius:80, sides:5,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}


出力SVG(sample975a.svg)をPNGにレンダリングした画像
SVGRendererで描画した正多角形


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

関連項目
SVGRendererでグラデーションのかかった星を描画する (図形をグラデーションで塗りつぶす方法)
groovyで正多角形を描画する (GraphicsRendererで描画した同様の処理)