Wednesday, December 31, 2008

groovyで画像に放射ブラーをかける

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

import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample851a.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 {
motionBlur(angle:0, distance:1.0,
rotation:0, zoom:0.1, wrapEdges:false)
}
}
}


元画像(sf.jpg)


出力画像(sample851a.png)


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

関連項目
Java2DとJava Image Filters(pixels)を使用して放射ブラーをかける

groovyで吹き出し画像を描画する

groovyで吹き出し画像を描画するには、以下のコードを実行します。

import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample787a.png", 200, 200){
antialias("on")
balloon( x: 80, y: 20, width: 100, height: 100,
fill: color("#bbddff"),
tabLocation: "left",
tabDisplacement: 0.8,
tabHeight: 10,
tabWidth: 10,
borderColor: color("#103080"),
borderWidth: 2
)
}


出力画像(sample787a.png)
groovyで描画した吹き出し画像

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

関連項目
SVGRendererで吹き出しを描画する (SVGRendererで描画した吹き出し)

RMagickでプラズマフラクタル画像を生成する

RMagickでプラズマフラクタル画像を生成するには、以下のコードを実行します。

require 'RMagick'
include Magick

img = Image.read("plasma:fractal"){
self.size = "150x150"
}

img[0].write("sample720a.png")

exit

出力画像(sample720a.png)


動作環境
ruby1.8.6-26/RMagick-2.3.0-ImageMagick-6.4.0-2-Q8

関連項目
RMagickで濃淡模様が中央に吸い込まれるような画像を作成する

Tuesday, December 30, 2008

JMagickで画像の端がかすれたような処理をする

JMagickで画像の端がかすれたような処理をするには、以下のコードを実行します。


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

public class JMagickTest45
{
public static void main(String args[])
throws MagickException
{
/* 画像の端をかすれたように処理する */
MagickImage mi = new MagickImage(new ImageInfo("sf2.jpg"));
int w = (int)mi.getDimension().getWidth();
int h = (int)mi.getDimension().getHeight();
// マスク作成
ImageInfo ii = new ImageInfo("xc:none");
ii.setSize(w + "x" + h);
MagickImage mi2 = new MagickImage(ii);
DrawInfo di = new DrawInfo(ii);
di.setFill(new PixelPacket(0xff*256, 0xff*256, 0xff*256, 0));
di.setPrimitive("rectangle 10, 10, 289, 214");
mi2.drawImage(di);
mi2 = mi2.spreadImage(3);
// 切り取り
mi2.compositeImage(CompositeOperator.SrcInCompositeOp,mi,0,0);
// 白背景作成
ImageInfo ii2 = new ImageInfo("xc:white");
ii2.setSize(w + "x" + h);
MagickImage mi3 = new MagickImage(ii2);
mi3.compositeImage(CompositeOperator.OverCompositeOp,mi2,0,0);

mi3.setFileName("sample726a.jpg");
mi3.writeImage(new ImageInfo());
}
}


元画像(sf2.jpg)


出力画像(sample726a.jpg)


関連情報
JMagickまとめ
ImageMagickで、画像の端をかすれたように処理する
ImageMagickでクレヨン風の文字列を描画する

groovyで矢印を描画する

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample786a.png", 200, 200){
antialias("on")
arrow( x: 100, y: 100, width: 100, height: 50,
angle:45,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}


出力画像(sample786a.png)


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

Monday, December 29, 2008

RMagickで、画像を中心から上下へ徐々に大きく揺らす

RMagickで、画像を中心から上下へ徐々に大きく揺らすには、以下のコードを実行します。

require 'RMagick'
include Magick

images1 = ImageList.new("sf2.jpg")
img = images1.fx("j>h/2?p[cos(pi*j/15)*(j-h/2)*0.1,0]:p[cos(pi*(j-h/2)/15)*(h/2-j)*0.1,0]", Magick::AllChannels)

img.write("sample719a.png")

exit

元画像(sf2.jpg)


出力画像(sample719a.png)


動作環境
ruby1.8.6-26/RMagick-2.3.0-ImageMagick-6.4.0-2-Q8

関連項目
ImageMagickで、画像を中心から上下へ徐々に大きく揺らす (convertコマンドでの同様の処理)
RMagickで画像を揺らす

groovyで円弧を描画する

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample785.png", 200, 200){
antialias("on")
arc( x: 0, y: 0, width: 198, height: 198,
start:0, extent:45,
borderColor: color("#cc0000"),
borderWidth: 2,
fill: color(red: 0xff, green: 0xcc, blue: 0x66),
close: "pie"
)
}


出力画像(sample785.png)


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

関連項目
SVGRendererで円弧を描画する (SVGRendererでの同様の処理)

Sunday, December 28, 2008

librsvgを使用して文字ごとに書式を設定する

librsvgを使用して文字ごとに書式を設定するには、以下のsvgファイルを処理します。

pop.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="200" height="70">
<!-- 文字ごとに書式を変更 -->
<text x="10" y="46" font-family="Tahoma"
fill="#a09090" stroke="#a09090" stroke-width="1">
<tspan font-size="52">S</tspan><tspan font-size="30">ample</tspan>
</text>
</svg>


コマンド
rsvg-convert pop.svg -f png -o sample732a.png

出力画像(sample732a.png)

関連項目
librsvgをwindowsで使用してSVGからPNG画像を生成する (librsvgをWindowsで使用する方法)
librsvgを使用して、画像に半透明ぼかしの文字列を描画する
librsvgで文字列を描画する

Saturday, December 27, 2008

JMagickで手塗り風の四角を描画する

JMagickで手塗り風の四角を描画するには、以下のコードを実行します。


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

public class JMagickTest44
{
public static void main(String args[])
throws MagickException
{
/* 手塗り風の四角を描画する */
ImageInfo ii = new ImageInfo("xc:white");
ii.setSize("200x200");

DrawInfo di = new DrawInfo(ii);
di.setFill(new PixelPacket(0xbb*256, 0xdd*256, 0xff*256, 0));
di.setPrimitive("rectangle 10, 10, 189, 189");
MagickImage mi = new MagickImage(ii);
mi.drawImage(di);
mi = mi.spreadImage(3);
mi = mi.medianFilterImage(5);
mi.setFileName("sample725a.jpg");
mi.writeImage(new ImageInfo());
}
}


出力画像(sample725a.jpg)


環境
JDK6 Upadate6(JDK1.6.0_06)/jmagick-win-6.3.9-Q16

関連情報
JMagickまとめ

Friday, December 26, 2008

RMagickで画像を円形に切り取る

RMagickで画像を円形に切り取るには、以下のコードを実行します。

require 'RMagick'
include Magick

images1 = ImageList.new("sf.jpg")
images1.alpha = ActivateAlphaChannel
img2 = Image.new(images1.columns, images1.rows){
self.background_color = "none"
}

idr = Draw.new
idr.fill = "white"
idr.ellipse(images1.columns/2,images1.rows/2,
images1.columns/2,images1.rows/2,0,360)
idr.draw(img2);

img3 = images1.composite(img2, 0, 0, DstInCompositeOp);
img3.write("sample718a.png")

exit

元画像(sf.jpg)


出力画像(sample718a.png)


関連項目
RMagickで画像の指定した点から円形のバンド状に明るさを変える

Thursday, December 25, 2008

librsvgを使用して虹色の文字列を描画する

librsvgで虹色の文字列を描画するには、以下のsvgファイルを処理します。

rainbow.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="200" height="60">

<defs>
<linearGradient id="rainbowg" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="blue"/>
<stop offset="25%" stop-color="green"/>
<stop offset="50%" stop-color="yellow"/>
<stop offset="75%" stop-color="orange"/>
<stop offset="100%" stop-color="red"/>
</linearGradient>
</defs>

<text x="10" y="46" font-family="Arial" font-size="46"
fill="url(#rainbowg)">Rainbow
</text>
</svg>


コマンド
rsvg-convert rainbow.svg -f png -o sample731a.png

出力画像(sample731a.png)


関連項目
librsvgをwindowsで使用してSVGからPNG画像を生成する (librsvgをWindowsで使用する方法)

Wednesday, December 24, 2008

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

ImageMagickで不規則な筋状の画像を生成するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.4-Q16
%im%\convert.exe -size 200x200 plasma:fractal -fx "intensity" -normalize ( -size 1x1 xc:#3070A0FF xc:#ffffffff -append ) -fx "v.p{0,p}" -spread 2 -motion-blur 0x150+270 sample730a.png

※パターンを固定したい場合は、-seedオプションでシード値を指定します。

出力画像(sample730a.png)


関連項目
RMagickで不規則な筋状の画像を生成する
ImageMagickとPHPで不規則な筋状の画像を生成する (Imagickによる同様の処理)

Tuesday, December 23, 2008

RMagickで手塗り風の四角を描画する

RMagickで手塗り風の四角を描画するには、以下のコードを実行します。

require 'RMagick'
include Magick

sx = 200
sy = 200
px = 10
py = 10
# 白地画像作成
img = Image.new(sx, sy){
self.background_color = "white"
}
# 四角を描画
idr = Draw.new
idr.fill = "#bbddff"
idr.rectangle(px, py, sx-px, sy-py)
idr.draw(img);
# 拡散
img2 = img.spread(5);
# メディアンフィルタ
img3 = img2.median_filter(3)
img3.write("sample717a.png")

exit

出力画像(sample717a.png)


動作環境
ruby1.8.6-26/RMagick-2.3.0-ImageMagick-6.4.0-2-Q8

関連項目
ImageMagickで、手塗り風の四角を描画する (Convertコマンドでの同様の処理)
ImageMagickで手で切り取ったように不規則に画像を切り取る

Monday, December 22, 2008

ImageMagickで画像を3色のモノトーンにした画像に変換する

ImageMagickで画像を3色のモノトーンにした画像に変換するには、以下のバッチファイルを実行します。

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

%im%\convert.exe -size 300x225 xc:none -fill white -draw "roundrectangle 0,0,94,224,10,10" -matte -channel rgba ( sf2.jpg -colorspace gray -fill #c06030 -colorize 30% ) -compose src_in -composite sample729a.png

%im%\convert.exe -size 300x225 xc:none -fill white -draw "roundrectangle 100,0,194,224,10,10" -matte -channel rgba ( sf2.jpg -colorspace gray -fill #50b030 -colorize 30% ) -compose src_in -composite sample729b.png

%im%\convert.exe -size 300x225 xc:none -fill white -draw "roundrectangle 200,0,294,224,10,10" -matte -channel rgba ( sf2.jpg -colorspace gray -fill #3040c0 -colorize 30% ) -compose src_in -composite sample729c.png

%im%\convert.exe sample729a.png sample729b.png sample729c.png -flatten sample729d.png

元画像(sf2.jpg)


出力画像(sample729d.png)

Saturday, December 20, 2008

ImageMagickで白と透明色の市松模様の文字列を描画する

ImageMagickで白と透明色の市松模様の文字列を描画するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.4-Q16
rem 白と透明色の市松模様の文字列画像を生成
%im%\convert.exe -size 300x80 xc:none -stroke none -tile pattern:GRAY50 -font Comic-Sans-MS-Bold -gravity center +antialias -draw "font-size 40 text 0,0 'ImageMagick'" -transparent black sample728a.png
rem 元画像と生成した文字列画像を重ね合わせ
%im%\convert.exe sf2.jpg sample728a.png -composite sample728b.png

上記バッチファイルではGRAY50パターン(白黒の市松模様)をantialiasなしで
文字列を描画した後、黒色部分を透明色に変えて(-transparent black)います。
その後に、元画像と重ね合わせをしています。

元画像(sf2.jpg)


出力画像(sample728b.png)

Java2Dで画像の上に垂直に傾けた文字列を描画する

Java2Dで画像の上に垂直に傾けた文字列を描画するには、以下のコードを実行します。


import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;
import javax.imageio.*;

public class Java2DTest19
{
public static void main(String args[])
throws Exception
{
/* 文字列を縦に傾けて画像上に描画する */
BufferedImage img = ImageIO.read(new File("sf.jpg"));
Graphics2D gr = img.createGraphics();
/* 半透明色で四角を描画 */
gr.setColor(new Color(0x00, 0x00, 0x00, 0x70));
gr.fill(new Rectangle2D.Double(0,0,20,200));

/* 回転させた文字列を描画 */
gr.setColor(new Color(0xff, 0xff, 0xff));
gr.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 14));
gr.rotate(270/180.0*Math.PI, 100, 100);
gr.drawString("San Francisco", 2, 15);
gr.dispose();

ImageIO.write(img, "jpg", new File("sample727a.jpg"));
}
}


元画像(sf.jpg)


出力画像(sample727a.jpg)


関連項目
Java2Dで画像の上に半透明のぼやけた文字列を描画する
Java2Dで文字列をテクスチャ画像で塗りつぶす

Friday, December 19, 2008

JMagickでプラズマフラクタル画像を生成する

JMagickでプラズマフラクタル画像を生成するには、以下のコードを実行します。


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

public class JMagickTest43
{
public static void main(String args[])
throws MagickException
{
/* プラズマフラクタル画像を生成する */
ImageInfo ii = new ImageInfo("plasma:fractal");
ii.setSize("150x150");
MagickImage mi = new MagickImage(ii);
mi.setFileName("sample724a.jpg");
mi.writeImage(new ImageInfo());
}
}


出力画像(sample724a.jpg)


環境
JDK6 Upadate6(JDK1.6.0_06)/jmagick-win-6.3.9-Q16

関連情報
JMagickまとめ

Thursday, December 18, 2008

RMagickでマスクした部分を白黒にする

RMagickでマスクした部分を白黒にするには、以下のコードを実行します。

require 'RMagick'
include Magick

images = ImageList.new("sf.jpg")
images2 = ImageList.new("mask.bmp")
# 白黒マスクから透過反転マスクを作成
images2.alpha = ActivateAlphaChannel
img = images2.fx("1-r", Magick::AlphaChannel)

# マスク画像で切り取り
img3 = img.composite(images[0], 0, 0, SrcInCompositeOp)
# グレースケール画像に変換
images[0].colorspace = ColorspaceType::GRAYColorspace
# 切り取った画像とグレースケール画像を重ね合わせ
img4 = images[0].composite(img3, CenterGravity, 0, 0, OverCompositeOp)
img4.write("sample716a.png")

exit

元画像(sf.jpg)


マスク画像(mask.bmp)


出力画像(sample716a.png)


動作環境
ruby1.8.6-26/RMagick-2.3.0-ImageMagick-6.4.0-2-Q8

関連項目
ImageMagickで、マスクした部分を白黒に変換する (Convertコマンドで同様の処理)

Wednesday, December 17, 2008

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>sample715(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 文字列の影に横線を入れる */
$im = new Imagick();
$im->newImage(200, 50, 'none');
$im->setImageMatte(true);

$idraw = new ImagickDraw();
/* 塗りつぶし色設定 */
$idraw->setFillColor('#707070');
/* フォント設定 */
$idraw->setFont('Tahoma');
/* フォントサイズ設定 */
$idraw->setFontSize(30);
/* gravity設定 */
$idraw->setGravity(Imagick::GRAVITY_CENTER);
$im->annotateImage($idraw, 0, 0, 0, "ImageMagick");

/* 影つけ */
$im2=$im->clone();
$im2->setImageBackgroundColor('black');
$im2->shadowImage(70,3,5,5);

/* 1ラインごとに透明に */
$it = $im2->getPixelIterator();
foreach($it as $py => $line){
if($py%2 == 0 ){
foreach($line as $px => $pixel){
$pixel->setColorValue(Imagick::COLOR_ALPHA, 0);
}
}
$it->syncIterator();
}

/* 白背景と重ね合わせて保存 */
$im3 = new Imagick();
$im3->newImage($im->getImageWidth(), $im->getImageHeight(), "white");
$im3->addImage($im);
$im3->addImage($im2);
$im4=$im3->mosaicImages();

$im4->writeImage('sample715a.png');

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

</body>
</html>


出力画像(sample715a.png)


関連項目
ImageMagickで、文字列の影に横線をいれる (Convertコマンドによる同様の処理)
ImageMagickとPHPで透過PNGに影付けして、影にモーションブラーをかける

Tuesday, December 16, 2008

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>sample714(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 画像をグレースケールにする */
$im = new Imagick("sf.jpg");
$im->setImageColorspace(Imagick::COLORSPACE_GRAY);
$im->writeImage('sample714a.png');

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

</body>
</html>

元画像(sf.jpg)


出力画像(sample714a.png)


関連項目
ImageMagickとPHPで指定された点を中心として徐々に画像を白黒化させる
ImageMagickとPHPで青っぽいところ以外を白黒にする
ImageMagickとPHPで画像上に描画した文字列以外の部分をグレースケールにする
ImageMagickとPHPで、画像の緑っぽい所以外は白黒にする

Monday, December 15, 2008

JMagickで画像をタイル配置する

JMagickで画像をタイル配置するには、以下のコードを実行します。

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

public class JMagickTest42
{
public static void main(String args[])
throws MagickException
{
/* 画像をタイル配置する */
ImageInfo ii = new ImageInfo("tile:flower1.png");
ii.setSize("200x200");
MagickImage mi = new MagickImage(ii);
mi.setFileName("sample713a.jpg");
mi.writeImage(new ImageInfo());
}
}

元画像(flower1.png)


出力画像(sample713a.jpg)


関連情報
JMagickまとめ

Sunday, December 14, 2008

ImageMagickで画像に立体的な角丸四角の枠をつける

ImageMagickで画像に立体的な角丸四角の枠をつけるには、以下のコードを実行します。

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

%im%\convert.exe -size 200x200 xc:none -stroke white -strokewidth 8 -fill none -draw "roundrectangle 10,10,190,190,10,10" ( +clone -blur 0x3 -shade 135x23 ) -compose hard-light -composite ( -size 200x200 xc:none -stroke white -strokewidth 8 -fill white -draw "roundrectangle 10,10,190,190,10,10" -matte -channel rgba sf.jpg -compose src_in -composite ) -swap 0,1 -compose src-over -composite sample712a.png

元画像(sf.jpg)


出力画像(sample712a.png)


関連項目
ImageMagickで、画像に半透明角丸四角の枠をつける
ImageMagickで、縁取りつきの角丸四角で画像を切り取る
ImageMagickで画像に立体的な枠をつける
ImageMagickで画像に半透明ガラス枠をつける
ImageMagickで画像にストライプ枠をつける

Saturday, December 13, 2008

ImageMagickで画像をグレースケールの立体的な角丸四角に変換する

ImageMagickで画像をグレースケールの立体的な角丸四角に変換するには、以下のコマンドを実行します。

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

rem 画像をグレースケールの立体的な角丸四角に変換する
%im%\convert.exe -size 200x200 xc:none -fill white -draw "roundrectangle 10,10,190,190,10,10" -matte -channel rgba sf.jpg -compose src_in -composite -modulate 160 -colorspace gray ( -size 200x200 xc:none -fill white -draw "roundrectangle 10,10,190,190,10,10" -shade 135x23 -blur 0x2 -normalize -matte -channel rgba ) -swap 0,1 -compose overlay -composite sample711a.png

元画像(sf.jpg)


出力画像(sample711a.png)


関連項目
ImageMagickで、縁を明るくして角丸四角に切り取る
ImageMagickで画像を角丸四角に切り取って文字入れをする
ImageMagickとPHPで画像をグレースケールの立体的な角丸四角に変換する (Imagickによる同様の処理)

GMICを使用して画像を重ね合わせる

GMICを使用して画像を重ね合わせるには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set gmic=C:\share\gmic-0.8

rem 50,50の位置で重ね合わせ
%gmic%\gmic.exe sf.jpg sample3b.jpg -draw[0] [1],50,50 -remove[1] -o sample709a.png

rem 10,90,0の位置で透明度0.5で重ね合わせ
%gmic%\gmic.exe sf.jpg sample3b.jpg -draw[0] [1],10,90,0,0.5 -remove[1] -o sample709b.png

元画像1(sf.jpg)


元画像2(sample3b.jpg)


出力画像1(sample709a.png)


出力画像2(sample709b.png)


関連項目
G'MICのホームページ

Friday, December 12, 2008

RMagickで画像上に描画した文字列以外の部分をグレースケールにする

RMagickで画像上に描画した文字列以外の部分をグレースケールにするには、以下のコードを実行します。

require 'RMagick'
include Magick

images = ImageList.new("sf.jpg")
img2 = Image.new(images[0].columns, images[0].rows){
self.background_color = "none"
}

dr = Draw.new
# 使用フォント
dr.font = "Tahoma-Bold"
# ポイントサイズ
dr.pointsize = 28
# 描画色
dr.fill = "white"
# gravity
dr.gravity = CenterGravity
dr.annotate(img2, 0, 0, 0, -40, "San Francisco")
# 文字で切り取り
img3 = img2.composite(images[0], 0, 0, SrcInCompositeOp)

# グレースケール画像
images2 = ImageList.new("sf.jpg")
images2.colorspace = ColorspaceType::GRAYColorspace

# グレースケール画像と文字で切り取ったカラー画像を重ね合わせ
img4 = images2.composite(img3, CenterGravity, 0, 0, OverCompositeOp);
img4.write("sample708a.png")

exit

元画像(sf.jpg)


出力画像(sample708a.png)


関連項目
RMagickで日本語文字列を描画する
RMagickで半透明影つきの文字列を描画する

Wednesday, December 10, 2008

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>sample707(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 画像に半透明ガラス枠をつける */
$dx = 15;
$dy = 15;

$im = new Imagick("sf.jpg");
$ox = $im->getImageWidth();
$oy = $im->getImageHeight();
/* 画像をリサイズ */
$im->resizeImage(
$ox+$dx*2, $oy+$dy*2,
imagick::FILTER_MITCHELL, 1, false);
/* ちょっと暗めに */
$im2 = $im->fxImage("p*0.8");
/* 黒色の枠をつける */
$im2->borderImage('#000000', $dx, $dy);

$idraw = new ImagickDraw();
/* 塗りつぶし色設定 */
$idraw->setFillColor('#ffffff');
$idraw->rectangle($dx*2, $dy*2,
$ox+$dx*2-1, $oy+$dy*2-1);
$im2->drawImage($idraw);
/* ぼかす */
$im2->blurImage(0,2);
/* 切り取り */
$im2->cropImage($ox+$dx*2, $oy+$dy*2, $dx, $dy);
/* 重ね合わせ */
$im3 = new Imagick("sf.jpg");
$im2->compositeImage($im3,
Imagick::COMPOSITE_DEFAULT, $dx, $dy);
$im2->writeImage('sample707a.png');

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

</body>
</html>

元画像(sf.jpg)


出力画像(sample707a.png)


関連項目
ImageMagickで画像に半透明ガラス枠をつける (Convertコマンドによる同様の処理)

Tuesday, December 09, 2008

Java2DとJava Image Filters(pixels)を使用して画像の端を暗くする

Java2DとJava Image Filters(pixels)を使用して画像の端を暗くするには、以下のコードを実行します。


import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;
import javax.imageio.*;
import com.jhlabs.image.*;

public class Java2DTest61
{
public static void main(String args[])
throws Exception
{
/* 画像の端を暗くぼかす */
BufferedImage img = ImageIO.read(new File("sf.jpg"));
BufferedImage img2 = new BufferedImage(
img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB
);
/* 端を空けて白で塗りつぶし */
Graphics2D gr1 = img2.createGraphics();
gr1.setColor(new Color(1F, 1F, 1F, 1F));
Rectangle2D rr = new Rectangle2D.Double(
2.0, 2.0, img.getWidth()-4, img.getHeight()-4);
gr1.fill(rr);
gr1.dispose();

/* ぼかし */
GaussianFilter gf = new GaussianFilter(10);
BufferedImage img3 = gf.filter(img2, null);

/* 切り取り */
Graphics2D gr2 = img3.createGraphics();
gr2.setComposite(AlphaComposite.SrcIn);
gr2.drawImage(img,0,0,null);
gr2.dispose();

/* 黒色背景画像を作成 */
BufferedImage img4 = new BufferedImage(
img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB
);
FillFilter ff2 = new FillFilter(0xff000000);
BufferedImage img5 = ff2.filter(img4, null);

/* 切り取った画像と合成 */
Graphics2D gr3 = img5.createGraphics();
gr3.drawImage(img3,0,0,null);
gr3.dispose();
ImageIO.write(img5, "jpg", new File("sample710a.jpg"));

}
}


元画像(sf.jpg)


出力画像(sample710a.jpg)


関連項目
Jerry Huxtableさんのホームページ
http://www.jhlabs.com/index.html
Java Image Filtersのページ
http://www.jhlabs.com/ip/filters/
java.netでのプロジェクトページ
https://pixels.dev.java.net/

Monday, December 08, 2008

librsvgを使用して白い影を描画する

librsvgを使用して白い影を描画するには、以下のsvgファイルを処理します。

whiteshadow.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="200" height="200">

<defs>
<filter id="gbf" filterUnits="userSpaceOnUse" x="0" y="0" width="220" height="50" >
<feColorMatrix in="SourceAlpha" type="matrix"
values="-1,0,0,0,1 0,-1,0,0,1 0,0,-1,0,1 0,0,0,1,0" result="ra"/>
<feGaussianBlur in="ra" stdDeviation="4" result="shadow"/>
<feOffset in="shadow" dx="4" dy="4" result="shadow2"/>
<feComposite in="SourceGraphic" in2="shadow2" operator="over"/>
</filter>
</defs>

<image x="0" y="0" width="200" height="200"
xlink:href="sf.jpg" >
<title>sf.jpg</title>
</image>
<text x="10" y="30" font-family="Arial" font-size="25"
style="fill:#888080; stroke:#888080;" filter="url(#gbf)">San Francisco
</text>
</svg>

コマンド
rsvg-convert whiteshadow.svg -f png -o sample706.png

元画像(sf.jpg)


出力画像(sample706.png)

Sunday, December 07, 2008

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

ImageMagickで画像を交差する線のスケッチ調に変換するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.4-Q16
%im%\convert.exe sf.jpg -modulate 120 -sketch 0x10+45 ( sf.jpg -modulate 120 -sketch 0x10+135 -matte -channel a -fx 0.5 ) -composite sample749a.png

上では少し画像を明るくした後、45度と135度の角度でスケッチ画像を生成して、
135度の画像を半透明にして重ね合わせています。

元画像(sf.jpg)


出力画像(sample749a.png)


関連項目
ImageMagickで、画像を端がちぎられたようなスケッチ調の画像に変換する