Saturday, April 11, 2009

Pycairoで画像を上下反転させる

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

# coding=UTF-8
import cairo

img = cairo.ImageSurface.create_from_png("sf.png")
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)
ctx.translate(0, img.get_height())
ctx.scale(1.0, -1.0)
ctx.set_source_surface(img, 0, 0)
ctx.paint()
surface.write_to_png('sample1017a.png')


元画像(sf.png)


出力画像(sample1017a.png)


動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

pycairoで画像を左右反転させる

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

RMagickで画像を滲んだ感じに変換するには、以下のコードを実行します。

require 'RMagick'
include Magick

# 画像を滲んだ感じに変換する
fn = "sf2.jpg"

images = ImageList.new(fn)
images.colorspace = GRAYColorspace
images.read(fn)
images[images.size-1] = images.spread(4).blur_image(0,1)
images.first.composite(images[images.size-1], 0, 0,
OverlayCompositeOp).write("sample931a.png")

exit


元画像(sf2.jpg)


出力画像(sample931a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで画像を滲んだ感じに変換する (convertコマンドでの同様の処理)

Friday, April 10, 2009

pycairoで角丸四角でクリッピングして画像を描画する

pycairoで角丸四角でクリッピングして画像を描画するには、以下のコードを実行します。

# coding=UTF-8
import cairo
import math

img = cairo.ImageSurface.create_from_png("sf.png")
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)

x = 10
y = 10
w = 180
h = 180
r = 20

ctx.move_to(x+r, y)
ctx.line_to(x+w-r-1, y)
ctx.arc(x+w-r-1, y+r, r, -0.5*math.pi, 0)
ctx.line_to(x+w-1, y+h-r-1)
ctx.arc(x+w-r-1, y+h-r-1, r, 0, 0.5*math.pi)
ctx.line_to(x+r, y+h-1)
ctx.arc(x+r, y+h-r-1, r, 0.5*math.pi, math.pi)
ctx.line_to(x, y+r)
ctx.arc(x+r, y+r, r, math.pi, 1.5*math.pi)
ctx.close_path()
ctx.clip()
ctx.set_source_surface(img, 0, 0)
ctx.paint()
surface.write_to_png('sample1016a.png')

出力画像(sample1016a.png)
pycairoで角丸四角でクリッピングして描画した画像

動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

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>sample926(ImageMagick6.4.8)</title>
</head>
<body>
<?php
/* 文字ごとに背景色が異なる文字列を描画する */
/* 表示文字列 */
$message_string = "ImageMagick";
/* 描画色 */
$color1 = "#703020";
$color2 = "white";
/* ブロック幅・高さ */
$bw = 20;
$bh = 20;
/* 文字サイズ */
$ps = 15;

$images = new Imagick();
for($sl=0;$sl<strlen($message_string);$sl++){
$dc1 = $sl%2==0?$color1:$color2;
$dc2 = $sl%2==0?$color2:$color1;

$im = new Imagick();
$im->newImage($bw, $bh, $dc1);

$idraw = new ImagickDraw();
/* 塗りつぶし色設定 */
$idraw->setFillColor($dc2);
$im->drawImage($idraw);
/* フォント設定 */
$idraw->setFont('Tahoma-Bold');
/* フォントサイズ設定 */
$idraw->setFontSize($ps);
$idraw->setGravity(Imagick::GRAVITY_CENTER);
$im->annotateImage($idraw, 0, 0, 0,
substr($message_string,$sl,1));

$images->addImage($im);
$idraw->destroy();
$im->destroy();
}
$images->setImageIndex(0);
$im2 = $images->appendImages(false);
$im2->writeImage('sample926a.png');

$images->destroy();
$im2->destroy();
?>
<img src="sample926a.png" /><br />

</body>
</html>


出力画像(sample926a.png)
Imagickで描画した文字ごとに背景色が異なる文字列

Thursday, April 09, 2009

pycairoでラインキャップとラインジョインのタイプを指定する

pycairoでラインキャップとラインジョインのタイプを指定するには、以下のコードを実行します。

# coding=UTF-8
import cairo

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)

ctx.move_to(50, 150)
ctx.line_to(100, 50)
ctx.line_to(150, 150)

ctx.set_line_cap(cairo.LINE_CAP_ROUND)
ctx.set_line_join(cairo.LINE_JOIN_ROUND)
ctx.set_line_width(20)
ctx.set_source_rgb(0x11/float(0xff), 0x33/float(0xff), 0x77/float(0xff))
ctx.stroke()
surface.write_to_png('sample1015a.png')

出力画像(sample1015a.pn)


動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

groovyでフラクタルフレーム画像を生成する

groovyでフラクタルフレーム画像を生成するには、以下のコードを実行します。


import groovy.swing.j2d.*

w=200
h=200
gr = new GraphicsRenderer()
gr.renderToFile("sample1009a.png", w, h){
antialias 'on'
rect( x: 0, y: 0, width: w, height: h,
borderColor: no){
filters {
fractalFlame()
}
}
}
gr.renderToFile("sample1009b.png", w, h){
antialias 'on'
rect( x: 0, y: 0, width: w, height: h,
borderColor: no){
filters {
fractalFlame(ifs: new org.jvnet.substance.watermarkpack.flamefractal.Vortex())
}
}
}


出力画像(sample1009a.png)


出力画像(sample1009b.png)
groovyで生成したフラクタルフレーム画像

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

ImageMagickで画像を縮小してタイル配置にして回転させる

ImageMagickで画像を縮小してタイル配置にして回転させるには、以下のバッチファイルを実行します。

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

%im%\convert.exe sf.jpg -virtual-pixel tile -distort SRT "0.25 45" sample916a.png

元画像(sf.jpg)


出力画像(sample916a.png)

Wednesday, April 08, 2009

pycairoで角丸四角を描画する

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

# coding=UTF-8
import cairo
import math

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)

x = 40
y = 50
w = 120
h = 100
r = 20

ctx.move_to(x+r, y)
ctx.line_to(x+w-r-1, y)
ctx.arc(x+w-r-1, y+r, r, -0.5*math.pi, 0)
ctx.line_to(x+w-1, y+h-r-1)
ctx.arc(x+w-r-1, y+h-r-1, r, 0, 0.5*math.pi)
ctx.line_to(x+r, y+h-1)
ctx.arc(x+r, y+h-r-1, r, 0.5*math.pi, math.pi)
ctx.line_to(x, y+r)
ctx.arc(x+r, y+r, r, math.pi, 1.5*math.pi)
ctx.close_path()

ctx.set_source_rgb(0xbb/float(0xff), 0xdd/float(0xff), 0xff/float(0xff))
ctx.fill_preserve()
ctx.set_source_rgb(0x11/float(0xff), 0x33/float(0xff), 0x77/float(0xff))
ctx.stroke()
surface.write_to_png('sample1014a.png')

出力画像(sample1014a.png)
pycairoで描画した角丸四角

動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

ImageMagickで画像を点画のように変換する

ImageMagickで画像を点画のように変換するには、以下のバッチファイルを実行します。

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

%im%\convert.exe sf.jpg -modulate 100,250 -sketch 0x10+135 -spread 1 sample941a.png


元画像(sf.jpg)


出力画像(sample941a.png)


関連項目
ImageMagickで画像を絵画風に変換する

Tuesday, April 07, 2009

pycairoで回転した四角を描画する

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

# coding=UTF-8
import cairo
import math

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)

ctx.translate(100, 100)
ctx.rotate(math.pi*45/180)
ctx.rectangle(-50, -50, 100, 100)
ctx.set_source_rgb(0xbb/float(0xff), 0xdd/float(0xff), 0xff/float(0xff))
ctx.fill()
surface.write_to_png('sample1013a.png')

出力画像(sample1013a.png)


動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

RMagickを使用して、正多角形で画像を切り取る

RMagickを使用して、正多角形で画像を切り取るには、以下のコードを実行します。

require 'RMagick'
include Magick

# 正多角形で画像を切り取る
# 出力画像サイズ
width=200
height=200
# 頂点数
np = 6

images = ImageList.new
images.new_image(width, height){
self.background_color = "none"
}

cx = width/2
cy = height/2
rx = width/2
ry = height/2
sr = 360/np
ia = 270
points = []
np.times { |rc|
points << cx + Math.cos(Math::PI*(ia+sr*rc)/180)*rx
points << cy + Math.sin(Math::PI*(ia+sr*rc)/180)*ry
}
dr = Draw.new
dr.fill = "white"
dr.polygon(*points)
dr.draw(images)

images2 = ImageList.new("sf.jpg")
images2.alpha = ActivateAlphaChannel
images2.composite(images, 0, 0, DstInCompositeOp).
write("sample930a.png")

exit

元画像(sf.jpg)


出力画像(sample930a.png)



動作環境
ruby1.8.6, rmagick2.7.1

Monday, April 06, 2009

pycairoでテクスチャで塗りつぶしをする

pycairoでテクスチャで塗りつぶしをするには、以下のコードを実行します。

# coding=UTF-8
import cairo

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)

img = cairo.ImageSurface.create_from_png("flower1.png")
psp = cairo.SurfacePattern(img)
psp.set_extend(cairo.EXTEND_REPEAT)
ctx.rectangle(0, 0, 200, 200)
ctx.set_source(psp)
ctx.fill()
surface.write_to_png('sample1012a.png')

テクスチャ画像(flower1.png)


出力画像(sample1012a.png)


動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

groovyで画像に光を当てる

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


import javax.imageio.*;
import groovy.swing.j2d.*

img = ImageIO.read(new File("sf.jpg"))
w = img.getWidth()
h = img.getHeight()
gr = new GraphicsRenderer()
gr.renderToFile("sample1008a.png", w, h){
antialias 'on'
rect( x: 0, y: 0, width: w, height: h,
borderColor: no){
texturePaint(x: 0, y: 0, image: img )
filters {
lights {
pointLight(azimuth: 90/180f*Math.PI,
elevation: 0.4,
intensity: 0.7,
color: 'yellow',
centreX:0.8, centreY:0.1)
}
}
}
}

出力画像(sample1008a.png)
groovyで光を当てた画像

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

ImageMagickとPHPで、2値化した画像を半透明グラデーションにする

Imagickで、2値化した画像を半透明グラデーションにするには、以下のコードを実行します。

<!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>sample925(ImageMagick6.4.8)</title>
</head>
<body>
<?php
/* 2値化した画像を半透明グラデーションにする */
$im = new Imagick("tree1.jpg");
$im->setImageMatte(true);
$im->blackThresholdImage('#808080');
$im->whiteThresholdImage('#808080');
$im->paintTransparentImage("white", 0, 0);
$im->paintOpaqueImage("black", "white", 0);

/* 半透明グラデーション */
$im2 = new Imagick();
$im2->newPseudoImage($im->getImageWidth(),
$im->getImageHeight(), "gradient:#ffffffff-#00000000");
/* 切り取り */
$im2->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0,
Imagick::CHANNEL_ALL);
$im2->writeImage('sample925a.png');

/* 市松模様と重ね合わせ */
$im3 = new Imagick();
$im3->newPseudoImage($im->getImageWidth(),
$im->getImageHeight(), "pattern:CHECKERBOARD");

$im3->compositeImage($im2, Imagick::COMPOSITE_OVER, 0, 0,
Imagick::CHANNEL_ALL);
$im3->writeImage('sample925b.png');

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

</body>
</html>

出力画像(sample925b.png)


関連項目
ImageMagickで、2値化した画像を半透明グラデーションにする (convertコマンドによる同様の処理)
ImageMagickとPHPで、画像の2値化を行う

Sunday, April 05, 2009

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

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

# coding=UTF-8
import cairo

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)

x1 = x2 = 100
r1 = 0
y1 = y2 = 100
r2 = 100

rg = cairo.RadialGradient(x1, y1, r1, x2, y2, r2)
rg.add_color_stop_rgba(0.00, 0x11/float(0xff), 0x33/float(0xff), 0x77/float(0xff), 1)
rg.add_color_stop_rgba(0.75, 0xbb/float(0xff), 0xdd/float(0xff), 0xff/float(0xff), 1)
rg.add_color_stop_rgba(1.00, 0xff/float(0xff), 0xa5/float(0xff), 0x00/float(0xff), 1)
ctx.rectangle(0, 0, 200, 200)
ctx.set_source(rg)
ctx.fill()
surface.write_to_png('sample1011a.png')

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

動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

pycairoでグラデーションを描画する

pycairoを使用して半透明放射グラデーションで画像を切り取る

Saturday, April 04, 2009

ImageMagickで、画像を暗くしてぼんやりと光のあたったプレートに加工する

ImageMagickで、画像を暗くしてぼんやりと光のあたったプレートに加工するには、以下のバッチファイルを実行します。

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

%im%\convert.exe -size 200x200 sf.jpg -evaluate multiply 0.5 ( -size 200x200 radial-gradient:#ffffff60-#ffffff00 -chop 40x70 -background none -extent 200x200+0+0 -channel rgba -blur 0x5 ) -composite ( -size 200x200 gradient:#d0d0d0d0-#000000d0 -distort SRT -35 -fx "i==0||i==w-1||j==0||j==h-1?p:0" ) -composite sample913a.png

rem 黒背景と重ね合わせ
%im%\convert.exe -size 220x220 xc:black -gravity center sample913a.png -composite sample913b.png

上記バッチの最初のconvertコマンドでは、以下の処理をしています。
1. -evaluate multiply 0.5で画像を暗くしています。
2. radial-gradientで放射グラデーションの明かりを作成して、-chopで位置をずらし、再度-extentでサイズ調整をして、-blurでぼかします。
3. gradientでグラデーションを作成して-distort SRT -35でグラデーションを傾け、-fxで画像の上下左右1ピクセルを残して枠を作成します。

元画像(sf.jpg)


出力画像1(sample913a.png)
ImageMagickで光のあたったプレートに加工した画像

出力画像2(sample913b.png)
加工したプレートと黒背景を重ね合わせた画像

pycairoでグラデーションを描画する

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

# coding=UTF-8
import cairo

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)

lg = cairo.LinearGradient(0, 0, 0, 200)
lg.add_color_stop_rgba(0.00, 0x11/float(0xff), 0x33/float(0xff), 0x77/float(0xff), 1)
lg.add_color_stop_rgba(0.75, 0xbb/float(0xff), 0xdd/float(0xff), 0xff/float(0xff), 1)
lg.add_color_stop_rgba(1.00, 0xff/float(0xff), 0xa5/float(0xff), 0x00/float(0xff), 1)
ctx.rectangle(0, 0, 200, 200)
ctx.set_source(lg)
ctx.fill()
surface.write_to_png('sample1005a.png')

出力画像(sample1005a.png)


動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

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

Friday, April 03, 2009

groovyで文字列をガラスのように描画する

groovyで文字列をガラスのように描画するには、以下のコードを実行します。


import javax.imageio.*;
import groovy.swing.j2d.*

img = ImageIO.read(new File("sf.jpg"))
w = img.getWidth()
h = img.getHeight()
gr = new GraphicsRenderer()
imgb = gr.render(w, h){
antialias("on")
rect( x: 0, y: 0, width: w, height: h,
borderColor: no, fill: color("#ffffff")){
}
font(new java.awt.Font('Tahoma', java.awt.Font.BOLD, 120))
text( x:30, y:60, text: "SF", fill: 'black')
}

imgc = gr.render(w, h){
antialias("on")
rect( x: 0, y: 0, width: w, height: h,
borderColor: no){
texturePaint(x: 0, y: 0, image: imgb )
filters {
gaussianBlur(radius:6)
}
}
}

gr.renderToFile("sample1007a.png", w, h){
antialias("on")
rect( x: 0, y: 0, width: w, height: h,
borderColor: no){
texturePaint(x: 0, y: 0, image: img )
filters {
displace(amount:0.5, displacementMap: imgc, edgeAction:'clamp')
}
}
}


元画像(sf.jpg)


出力画像(sample1007a.png)
groovyでガラスのように描画した文字列

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

関連項目
groovyで透明な文字列を描画する
Java2DとJava Image Filters(pixels)を使用して文字列をガラスのように描画する

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 Im4java8
{
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");
op.addImage("sample1006a.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)


出力画像(sample1006a.png)
im4javaでグレースケールに変換した画像

関連情報
im4javaのまとめ

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

im4javaで画像をセピアトーンに変更する

pycairoで線色と塗りつぶし色を指定して四角形を描画する

pycairoで線色と塗りつぶし色を指定して四角形を描画するには、以下のコードを実行します。

# coding=UTF-8
import cairo

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)
ctx.rectangle(50, 50, 100, 100)
ctx.set_source_rgb(0xbb/float(0xff), 0xdd/float(0xff), 0xff/float(0xff))
ctx.fill_preserve()
ctx.set_source_rgb(0x11/float(0xff), 0x33/float(0xff), 0x77/float(0xff))
ctx.stroke()
surface.write_to_png('sample1004a.png')

出力画像(sample1004a.png)


動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

Thursday, April 02, 2009

RMagickで渦巻き模様を生成する

RMagickで渦巻き模様を生成するには、以下のコードを実行します。


require 'RMagick'
include Magick

# 出力画像サイズ
width=100
height=100

images = ImageList.new
images.new_image(1, 1){
self.background_color = "white";
}
images.new_image(1, 1){
self.background_color = "#99aaee";
}
images.append(true).
resize(width*2, height*2, PointFilter).
swirl(2560).crop(width/2, height/2,
width, height).
write("sample929a.png")

exit


出力画像(sample929a.png)
RMagickで生成した渦巻き画像

動作環境
ruby1.8.6, rmagick2.7.1

関連項目ImageMagickで渦巻き画像を生成する

pycairoで日本語文字列を描画する

pycairoで日本語文字列を描画するには、以下のコードを実行します。

# coding=UTF-8
import cairo

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)
ctx.set_source_rgb(0xbb/float(0xff), 0xdd/float(0xff), 0xff/float(0xff))
ctx.select_font_face("MS 明朝", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
ctx.set_font_size(30);
ctx.move_to(10,100)
ctx.show_text("日本語テスト")
surface.write_to_png('sample1003a.png')

出力画像(sample1003a.png)


動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

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>sample924(ImageMagick6.4.8)</title>
</head>
<body>
<?php
/* 画像をグレースケールと反転させたグレースケールを交互に配置した画像に変換 */
/* グレースケール画像 */
$im = new Imagick("sample3b.jpg");
$im->setImageColorspace(Imagick::COLORSPACE_GRAY);

/* 反転させたグレースケール画像 */
$im2 = new Imagick("sample3b.jpg");
$im2->setImageColorspace(Imagick::COLORSPACE_GRAY);
$im2->negateImage(false);

/* 横方向に画像を連結 */
$im3 = new Imagick();
$im3->addImage($im);
$im3->addImage($im2);
$im3->setImageIndex(0);
$im4 = $im3->appendImages(false);

/* 横方向に画像を連結 */
$im5 = new Imagick();
$im5->addImage($im2);
$im5->addImage($im);
$im5->setImageIndex(0);
$im6 = $im5->appendImages(false);

/* 縦方向に画像を連結 */
$im7 = new Imagick();
$im7->addImage($im4);
$im7->addImage($im6);
$im7->setImageIndex(0);
$im8 = $im7->appendImages(true);

$im8->writeImage('sample924a.png');
$im8->destroy();
$im7->destroy();
$im6->destroy();
$im5->destroy();
$im4->destroy();
$im3->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample924a.png" /><br />

</body>
</html>

元画像(sample3b.jpg)


出力画像(sample924a.png)


関連項目
ImageMagickでグレースケール画像と反転したグレースケール画像が交互に配置された画像を生成する

Wednesday, April 01, 2009

pycairoで点線を描画する

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

# coding=UTF-8
import cairo

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)
ctx.set_source_rgb(0xbb/float(0xff), 0xdd/float(0xff), 0xff/float(0xff))
ctx.move_to(0,0)
ctx.line_to(200,200)
da = [8,4]
ctx.set_dash(da,0)
ctx.set_line_width(10)
ctx.stroke()
surface.write_to_png('sample1002a.png')

出力画像(sample1002a.png)
pycairoで描画した点線


動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

ImageMagickを使用して傾けた半透明グラデーションで画像を切り取る

ImageMagickを使用して傾けた半透明グラデーションで画像を切り取るには、以下のバッチファイルを実行します。

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

%im%\convert.exe sf.jpg -matte -channel rgba ( -size 200x200 gradient:#ffffffff-#00000000 -distort SRT 45 ) -compose dst_in -composite sample912a.png

rem 市松模様と重ね合わせ
%im%\convert.exe -size 200x200 pattern:CHECKERBOARD sample912a.png -composite sample912b.png

元画像(sf.jpg)


出力画像1(sample912a.png)


出力画像2(sample912b.png)


関連項目
ImageMagickとPHPで回転させた半透明グラデーションで画像を切り取る

pycairoでビットマップイメージを描画する

pycairoでビットマップイメージを描画するには、以下のコードを実行します。

# coding=UTF-8
import cairo

img = cairo.ImageSurface.create_from_png("flower1.png")
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)
ctx.set_source_surface(img, 10, 10)
ctx.paint()
ctx.set_source_surface(img, 10, 170)
ctx.paint()
ctx.set_source_surface(img, 170, 10)
ctx.paint()
ctx.set_source_surface(img, 170, 170)
ctx.paint()
surface.write_to_png('sample1001a.png')

ビットマップ画像(flower1.png)


出力画像(sample1001a.png)
pycairoで描画したビットマップイメージ

動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

groovyでレンズフレアを描画する

groovyでレンズフレアを描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample835a.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 {
flare(color: color("#ffffff"),
ringWidth: 1.2, baseAmount: 0.9,
ringAmount: 0.2, rayAmount: 1.4,
centre: new java.awt.geom.Point2D.Float(0.7f, 0.3f),
radius: 70)
}
}
}


元画像(sf.jpg)


出力画像(sample835a.png)
groovyで描画したレンズフレア

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

関連項目
Java2DとJava Image Filters(pixels)を使用してレンズフレアを描画する

pycairoで円を描画する

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

# coding=UTF-8
import cairo
import math

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)
ctx.set_source_rgb(0xbb/float(0xff), 0xdd/float(0xff), 0xff/float(0xff))
ctx.arc(100, 100, 80, 0, 2*math.pi)
ctx.fill()
ctx.stroke()
surface.write_to_png('sample1000a.png')

出力画像(sample1000a.png)
pycairoで描画した円

動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

ImageMagickとPHPで、画像を2値化して任意の色と透明色にかえる

Imagickで、画像を2値化して任意の色と透明色にかえるには、以下のコードを実行します。

<!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>sample911(ImageMagick6.4.8)</title>
</head>
<body>
<?php
/* 画像を2値化して、任意の色と透明色にかえる */

$im = new Imagick("tree1.jpg");
$im->setImageMatte(true);
$im->blackThresholdImage('#808080');
$im->whiteThresholdImage('#808080');
$im->paintTransparentImage("white", 0, 0);
$im->paintOpaqueImage("black", "#88aaff", 0);
$im->writeImage('sample911a.png');


/* 他の画像と重ね合わせ */
$im2 = new Imagick();
$im2->newPseudoImage($im->getImageWidth(),
$im->getImageHeight(), "pattern:CHECKERBOARD");

/* 重ね合わせ */
$im2->compositeImage($im, Imagick::COMPOSITE_OVER, 0, 0,
Imagick::CHANNEL_ALL);

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

</body>
</html>


元画像(tree1.jpg)


出力画像1(sample911a.png)


出力画像2(sample911a.png)


関連項目
ImageMagickで、2値化した画像を透明に設定したり、色を変える
ImageMagickとPHPで2値化して光が溢れるような画像に変換する
ImageMagickとPHPで画像の輪郭を影で浮かび上がらせた画像を生成する

groovyで立体的な文字列を描画する

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample834a.png", 200, 70){
antialias("on")
font(new java.awt.Font('Tahoma', java.awt.Font.BOLD, 50))
text( x:5, y:10,
text: "Sample",
fill: color("#ffffff"),
borderColor: no
){
filters {
chrome(amount: 0.3, exposure: 1.0)
}
}
}


出力画像(sample834a.png)
groovyで描画した立体的な文字列

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

関連項目
Java2DとJava Image Filters(pixels)を使用して立体的な文字列を描画する

Sunday, March 29, 2009

pycairoで四角形を描画する

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

# coding=UTF-8
import cairo

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)
ctx.rectangle(50, 50, 100, 100)
ctx.set_source_rgb(0xbb/float(0xff), 0xdd/float(0xff), 0xff/float(0xff))
ctx.fill()
surface.write_to_png('sample999a.png')

出力画像(sample999a.png)


動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

groovyで画像に等高線をつける

groovyで画像に等高線をつけるには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample836a.png", 100, 100){
antialias("on")
rect( x: 0, y: 0, width: 100, height: 100,
borderColor: no){
texturePaint(x: 0, y: 0, file: 'sample3b.jpg' )
filters {
contour(levels:10, scale:2, offset:0 )
}
}
}


元画像(sample3b.jpg)


出力画像(sample836a.png)
groovyで等高線をつけた画像

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

関連項目
Java2DとJava Image Filters(pixels)を使用して画像に等高線をつける