Saturday, February 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>sample889(ImageMagick6.4.8)</title>
</head>
<body>
<?php
/* 画像を彩度の異なるボーダー画像にする */
$im = new Imagick("sf.jpg");
/* 最小ボーダー高さ */
$minh = 5;
/* 最大ボーダー高さ */
$maxh = 20;
/* 最小彩度 */
$minsat = 30;
/* 細大彩度 */
$maxsat = 130;

$ly = 0;
while($ly<$im->getImageHeight()){
$height = rand($minh,$maxh);
if( ($height+$ly) > $im->getImageHeight() ){
$height = $im->getImageHeight() - $ly;
}
/* イメージを切り取り */
$imt = $im->getImageRegion($im->getImageWidth(),
$height,
0, $ly);
$imt->modulateImage(100, rand($minsat, $maxsat), 100);
$im->compositeImage($imt,
Imagick::COMPOSITE_DEFAULT, 0, $ly, Imagick::CHANNEL_ALL);
$ly += $height;
$imt->destroy();
}
$im->writeImage('sample889a.png');
$im->destroy();
?>
<img src="sample889a.png" /><br />

</body>
</html>


元画像(sf.jpg)


出力画像(sample889a.png)


関連項目
ImageMagickとPHPで青色っぽい部分とそれ以外の部分を色付けする

groovyで回転させた市松模様を描画する

groovyで回転させた市松模様を描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample819a.png", 200, 200){
antialias("on")
rect( x:0, y:0, width:200, height:200 ){
filters{
check(angle: 45,
xScale:16,
yScale:16
)
}
}
}


出力画像(sample819a.png)


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

関連項目
Java2DとJava Image Filters(pixels)を使用して市松模様を描画する

RMagickで画像を交差する線のスケッチ調に変換する

RMagickで画像を交差する線のスケッチ調に変換するには、以下のコードを実行します。

require 'RMagick'
include Magick

images1 = ImageList.new("sf.jpg");
img1 = images1.sketch(0, 10, 45)
images1[0] = images1.sketch(0, 10, 135)
images1.alpha = ActivateAlphaChannel
img2 = images1.fx("0.5", AlphaChannel)
img3 = img1.composite(img2, CenterGravity, 0, 0, OverCompositeOp);

img3.write("sample783a.png")

exit

元画像(sf.jpg)


出力画像(sample783a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで画像を交差する線のスケッチ調に変換する (convertコマンドによる同様の処理)

Friday, February 27, 2009

RMagickで不規則な筋状の画像を生成する

RMagickで不規則な筋状の画像を生成するには、以下のコードを実行します。

require 'RMagick'
include Magick

images1 = ImageList.new
images1 << Image.read("plasma:fractal"){
self.size = "200x200"
}.first
images1[0] = images1.fx("intensity", AllChannels).normalize()
images2 = ImageList.new
images2 << Image.new(1,1){
self.background_color = "#3070A0FF"
}
images2 << Image.new(1,1){
self.background_color = "#FFFFFFFF"
}
images1 << images2.append(true)
img = images1.fx("v.p{0,p}", AllChannels).spread(2).motion_blur(0,150,270)


img.write("sample782a.png")

exit

出力画像(sample782a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで不規則な筋状の画像を生成する (convertコマンドによる同様の処理)

groovyで点線角丸四角を描画する

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample883a.png", 200, 200){
antialias("on")
rect( x: 10, y: 10, width: 180, height: 180,
arcWidth: 20, arcHeight:20,
borderColor: color("#aaccff")){
basicStroke(dash: [4,4], width:2)
}
}


出力画像(sample883a.png)


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

関連項目
groovyで放射ストライプを描画する

groovyで金属風の画像を生成する

groovyで金属風の画像を生成するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample818a.png", 200, 200){
antialias("on")
rect( x:0, y:40, width:200, height:120){
filters{
brushedMetal(color: color("#b0b0b4"),
radius: 20, amount: 0.15,
monochrome: false,
shine: 0.1
)
}
}
}


出力画像(sample818a.png)
groovyで生成したメタル画像

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

関連項目
Java2DとJava Image Filters(pixels)を使用して金属風の画像を生成する (Java Image Filtersによる同様の処理)

im4javaで画像を角丸四角に切り取る

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


// im4java-0.96.0-bin.tar.bz2を解凍してim4java-0.96.0.jarはclasspathに通す
public class Im4java3
{
public static void main(String args[])
throws Exception
{
try
{
IMOperation op = new IMOperation();
op.verbose();
op.addImage("sf.jpg");

IdentifyCmd identify = new IdentifyCmd();
ArrayListOutputConsumer output =
new ArrayListOutputConsumer();
identify.setOutputConsumer(output);
identify.run(op);
ArrayList lines = output.getOutput();

int width = 0;
int height = 0;
for(String line:lines){
if( line.startsWith(" Geometry: ") ){
if( line.indexOf("+") != -1 ){
String sz[] = line.substring(
" Geometry: ".length(),
line.indexOf("+")
).split("x");
width = new Integer(sz[0]);
height = new Integer(sz[1]);
}
}
}

// 画像サイズと同じ大きさの角丸四角で切り取り
IMOperation op2 = new IMOperation();
op2.size(new Integer(width), new Integer(height));
op2.addImage("xc:none");
op2.alpha("activate").channel("rgba");
op2.fill("white");
op2.draw("roundrectangle 0,0," + (width-1) +
"," + (height-1) + ",30,30");
op2.addImage("sf.jpg");
op2.compose("src_in").composite();
op2.addImage("sample920a.png");

// ConvertCmd convert = new ConvertCmd();
ImageCommand convert = new WindowsConvertCmd();
convert.run(op2);


}
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)


出力画像(sample920a.png)


関連情報
im4javaのまとめ
im4javaで画像のサイズを取得する

groovyで放射ストライプを描画する

groovyで放射ストライプを描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample882a.png", 200, 200){
antialias("on")
background(color: color("white"))
rays(cx:90, cy:110, radius:200, rays:32,
fill:color("#aaccff"), borderColor:no)
}


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

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

関連項目
groovyで円状に文字列を描画する
SVGRendererで放射ストライプを描画する (SVGRendererでの同様の処理)

RMagickでイメージと回転させたイメージを交互に配置した画像を作成する

RMagickでイメージと回転させたイメージを交互に配置した画像を作成するには、以下のコードを実行します。

require 'RMagick'
include Magick

# イメージと回転させたイメージを交互に配置した画像を作成
images1 = ImageList.new("rectangles.png")
images1 << images1[0].rotate(90)
img1 = images1.append(false);
images2 = ImageList.new("rectangles.png")
images2.insert(0, images2[0].rotate(90))
img2 = images2.append(false);
images3 = ImageList.new
images3 << img1
images3 << img2
img3 = images3.append(true);
# 作成した画像をテクスチャとして塗りつぶし
img4 = Image.new(200, 200, TextureFill.new(img3))
img4.write("sample781a.png")

exit

元画像(rectangles.png)


出力画像(sample781a.png)
RMagickでイメージと回転させたイメージを交互に配置

動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで、元画像と90度回転させた元画像を交互に配置して背景画像を作成する (convertコマンドでの同様の処理)

Tuesday, February 24, 2009

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

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

<!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>sample888(ImageMagick6.4.8)</title>
</head>
<body>
<?php
/* 画像をグレースケール4色画像に変換する */
$im = new Imagick("sf.jpg");
$im->setImageColorspace(Imagick::COLORSPACE_GRAY);
$im->quantizeImage(4, Imagick::COLORSPACE_GRAY, 0, true , false);
$im->writeImage('sample888a.png');
$im->destroy();
?>
<img src="sample888a.png" /><br />

</body>
</html>

元画像(sf.jpg)


出力画像(sample888a.png)


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

groovyで魚型を描画する

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


import groovy.swing.j2d.*

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


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

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

関連項目
groovyで図形を放射グラデーションで塗りつぶす
groovyで図形をグラデーションで塗りつぶす
SVGRendererで魚を描画する (SVGRendererでの同様の処理)

Monday, February 23, 2009

groovyで円状に文字列を描画する

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample881a.png", 200, 200){
antialias("on")
xpath(borderColor:color("red")){
textStroke(text:"Groovy Groovy Groovy Groovy Groovy Groovy Groovy !!!",
font: new java.awt.Font('Tahoma', java.awt.Font.PLAIN, 20)
);
xmoveTo(x:180, y:100)
xarcTo(angle:180, largeArc: true, sweep:true, rx:80, ry:80, x:20, y:100)
xarcTo(angle:180, largeArc: true, sweep:true, rx:80, ry:80, x:180, y:100)
}
circle( cx: 100, cy: 100, radius:60, borderColor:color("orange")){
textStroke(text:"Groovy Groovy Groovy Groovy Groovy !!!",
font: new java.awt.Font('Tahoma', java.awt.Font.PLAIN, 20)
);
}
}


出力画像(sample881a.png)
textStrokeで描画した画像


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

関連項目
groovyで日本語を描画する

RMagickでアニメーションGIFの各フレームを連続した画像に変換する

RMagickでアニメーションGIFの各フレームを連続した画像に変換するには、以下のコードを実行します。

require 'RMagick'
include Magick

# アニメーションGIFの各フレームを連続した画像に変換する
images1 = ImageList.new("sample62.gif")
images1.size.times { |fn|
images1[fn] = images1[fn].resize(40,40).border(1,2,"#c0c0c0")
}
img = images1.append(false)
img.write("sample780a.png")

exit

元画像(sample62.gif)


出力画像(sample780a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで、アニメーションGIFの各フレームを連続した画像に変換する (convertコマンドでの同様の処理)

Sunday, February 22, 2009

groovyで図形を放射グラデーションで塗りつぶす

groovyで図形を放射グラデーションで塗りつぶすには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample816a.png", 200, 200){
antialias("on")
dolphinShape( x:0, y:20, width:200, height:160,
borderColor: color("#103080"),
borderWidth: 2
){
radialGradient( cx: 100, cy: 100, radius:100){
stop(offset: 0, color: "blue")
stop(offset: 0.25, color: "green")
stop(offset: 0.5, color: "yellow")
stop(offset: 0.75, color: "orange")
stop(offset: 1, color: "red")
}
}
}


出力画像(sample816a.png)
放射グラデーションで塗りつぶした図形

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

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