Saturday, February 14, 2009

RMagickで画像を黄色っぽくして端を暗くする

RMagickで画像を黄色っぽくして端を暗くするには、以下のコードを実行します。

require 'RMagick'
include Magick

images1 = ImageList.new("sf.jpg")
img1 = images1.contrast(true)
# 端が暗い画像を作成
images2 = ImageList.new
images2.new_image(200, 200){
self.background_color = "none"
}
images2.alpha = ActivateAlphaChannel
images2.virtual_pixel_method = Magick::BlackVirtualPixelMethod
img2 = images2.blur_channel(0, 10, ChannelType::AllChannels)
# 元画像と重ね合わせ
img3 = img1.composite(img2, CenterGravity, 0, 0, OverCompositeOp);
# かすかにぼかしのかかった半透明の緑っぽい画像を作成
images3 = ImageList.new("sf.jpg")
images3.alpha = ActivateAlphaChannel
img = images3.fx("0.5", AlphaChannel)
img.rows.times { |py|
line = img.get_pixels(0, py, img.columns, 1)
line.size().times { |px|
line[px].red = line[px].red*209/255;
line[px].green = line[px].green*221/255;
line[px].blue = line[px].blue*48/255;
}
img.store_pixels(0, py, img.columns, 1, line)
}
img4 = img.blur_channel(0, 1, ChannelType::AllChannels)
img5 = img4.modulate(1.2, 1, 1);
# 端が暗くなった元画像と重ね合わせ
img6 = img3.composite(img5, CenterGravity, 0, 0, OverCompositeOp);

img6.write("sample775a.png")

exit

元画像(sf.jpg)


出力画像(sample775a.png)
RMagickで黄色っぽく、端を暗く処理した画像

動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで、写真を黄色っぽく着色して端を暗くする (convertコマンドでの同様の処理)

groovyで画像をぼかす

groovyで画像をぼかすには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample875a.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 {
gaussianBlur(radius:4)
}
}
}


元画像(sf.jpg)


出力画像(sample875a.png)
groovyでガウシアンブラシをかけた画像

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

関連項目
groovyで画像をぼかす:その2
groovyでシェイプをぼかす
groovyで画像にスマート・ブラーをかける

Friday, February 13, 2009

im4javaで画像を台形変形する

im4javaで画像を台形変形するには、以下のコードを実行します(windows)。


import org.im4java.core.*;

// im4java-0.96.0-bin.tar.bz2を解凍してim4java-0.96.0.jarはclasspathに通す
public class Im4java1
{
public static void main(String args[])
throws Exception
{
try
{
IMOperation op = new IMOperation();
op.addImage("sf.jpg");
op.alpha("activate");
op.virtualPixel("transparent");
op.distort("perspective",
"0,0, 50,50, 200,0, 150,50, 0,200, 0,200, 200,200, 200,200");
op.addImage("sample919a.png");

// ConvertCmd convert = new ConvertCmd();
ImageCommand convert = new WindowsConvertCmd();
convert.run(op);
}
catch(CommandException cex)
{
System.out.println(cex.getErrorText());
cex.printStackTrace();
}
}

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)


出力画像(sample919a.png)
im4javaで台形変形した画像

関連情報
im4javaのまとめ

ImageMagickで台形変形を行う

im4javaのホームページ

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>sample784(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 青色っぽい部分とそれ以外の部分を色付けする */
$im = new Imagick("sf.jpg");
$im->setImageMatte(true);
/* 青色っぽい部分に色つけ */
$im2 = $im->fxImage("(hue>0.47&&hue<0.69&&lightness>0.45)?1:0", Imagick::CHANNEL_ALPHA);
$im3 = $im2->fxImage("luminance", Imagick::CHANNEL_RED | Imagick::CHANNEL_GREEN | Imagick::CHANNEL_BLUE);
$im3->tintImage(new ImagickPixel("#aaccff"),new ImagickPixel("#f0f0f0"));
/* 青色っぽい部分以外に色つけ */
$im4 = $im->fxImage("luminance", Imagick::CHANNEL_RED | Imagick::CHANNEL_GREEN | Imagick::CHANNEL_BLUE);
$im4->tintImage(new ImagickPixel("#f8c749"),new ImagickPixel("#f0f0f0"));
/* 重ね合わせ */
$im4->compositeImage($im3, Imagick::COMPOSITE_DEFAULT, 0, 0);

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

</body>
</html>

元画像(sf.jpg)


出力画像(sample784a.png)
青色っぽい部分とそれ以外で別に着色した画像

関連項目
ImageMagickで、青色っぽい部分とそれ以外の部分を色付けする (convertコマンドでの同様の処理)
ImageMagickで青色っぽい部分だけ他の画像と半透明に重ねあわせる

Thursday, February 12, 2009

RMagickで2つのイメージを交互に配置した画像を作成する

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

require 'RMagick'
include Magick

# 2個のイメージを交互に配置した画像を作成
images1 = ImageList.new("flower1.png", "flower2.png")
img1 = images1.append(false);
images2 = ImageList.new("flower2.png", "flower1.png")
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("sample774a.png")

exit

元画像1(flower1.png)


元画像2(flower2.png)


出力画像(sample774a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで、2種類の画像を交互に配置して背景画像を作成する (convertコマンドによる同様の処理)

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

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample874a.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 {
grayscale()
}
}
}


元画像(sf.jpg)


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

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

関連項目
groovyで画像を反転させる

Wednesday, February 11, 2009

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

ImageMagickで文字画像に半透明の濃淡をつけるには、以下のバッチファイルを実行します。

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

%im%\convert.exe -size 200x40 xc:none -matte -channel rgba -font Tahoma -pointsize 30 -fill #aaccf8 -gravity center -annotate 0 "ImageMagick" -blur 0x1 ( -size 200x40 plasma:fractal -colorspace gray -median 5 -normalize -modulate 80 -blur 0x3 -matte -channel a -fx "p.r" ) -compose dst_out -composite sample769a.png

出力画像(sample769a.png)


関連項目
ImageMagickでバンド状の半透明グラデーション円で画像を切り取る
ImageMagickで横方向に擦れたような半透明画像に変換する
RMagickで文字列画像に半透明の濃淡をつける (RMagickでの同様の処理)

groovyでバッジ画像を描画する

groovyでバッジ画像を描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample810a.png", 200, 200){
antialias("on")
star( cx:100, cy:100, count:40, ir:80, or:90,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}


出力画像(sample810a.png)
groovyで作成したバッジ画像

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

関連項目
groovyでイルカの形を描画する
groovyで画像をシャープにする

Tuesday, February 10, 2009

groovyで画像を反転させる

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample873a.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 {
invert()
}
}
}


元画像(sf.jpg)


出力画像(sample873a.png)


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

関連項目
groovyで画像を2値化する
ScriptomとImageMagickで画像を反転させる (ScriptomとImageMagickで同様の処理)

RMagickで画像を網掛けにする

RMagickで画像を網掛けにするには、以下のコードを実行します。


require 'RMagick'
include Magick

images = ImageList.new("sf.jpg")
img = images[0]
img.rows.times { |py|
line = img.get_pixels(0, py, img.columns, 1)
line.size().times { |px|
if (px % 2) == 0 or (py % 2) == 0 then
line[px].red = line[px].red/2;
line[px].green = line[px].green/2;
line[px].blue = line[px].blue/2;
end
}
img.store_pixels(0, py, img.columns, 1, line)
}
img.write("sample773a.png")

exit


元画像(sf.jpg)


出力画像(sample773a.png)


動作環境
ruby1.8.6, rmagick2.7.1

関連項目
ImageMagickで網掛けをする

Monday, February 09, 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>sample771(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 画像を32色に減色する */
$im = new Imagick("sf.jpg");
$im->quantizeImage(32, Imagick::COLORSPACE_RGB, 0, true , false);
$im->writeImage('sample771a.gif');
$im->destroy();
?>
<img src="sample771a.gif" /><br />

</body>
</html>

元画像(sf.jpg)


出力画像(sample771a.gif)


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

groovyで星型を描画する

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample809a.png", 200, 200){
antialias("on")
star( cx:100, cy:100, count:5, ir:20, or:80,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}


出力画像(sample809a.png)
graphicsbuilderで描画した星
動作環境
Groovy1.6.0 Beta2, JDK1.6 Update11

関連項目
groovyで四角を描画する
groovyで角丸四角を描画する
groovyで正多角形を描画する
groovyで四隅の角丸を指定して四角を描画する

Sunday, February 08, 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>sample770(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* ImageMagickとPHPで凹んだ影付き角丸四角を描画する */
/* 余白 */
$padx = 10;
$pady = 10;
/* 角丸半径 */
$rx = 20;
$ry = 20;

$im = new Imagick("sf.jpg");
$im2 = new Imagick();
$im2->newPseudoImage(
$im->getImageWidth(), $im->getImageHeight(),
"xc:white");
/* 白黒で角丸四角を描画 */
$idraw = new ImagickDraw();
$idraw->setFillColor("#000000");
$idraw->roundrectangle($padx,$pady,
$im->getImageWidth()-$padx-1,
$im->getImageHeight()-$pady-1, $rx, $ry);
$im2->drawImage($idraw);
/* redの値をalphaにして、青白い色をrgbに指定 */
$it = $im2->getPixelIterator();
foreach($it as $py => $line){
foreach($line as $px => $pixel){
$rv = $pixel->getColorValue(Imagick::COLOR_RED);
$pixel->setColorValue(Imagick::COLOR_RED, 0xe8/0xff);
$pixel->setColorValue(Imagick::COLOR_GREEN, 0xf0/0xff);
$pixel->setColorValue(Imagick::COLOR_BLUE, 0xf8/0xff);
$pixel->setColorValue(Imagick::COLOR_ALPHA, $rv);
}
$it->syncIterator();
}

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

/* 重ね合わせ */
$im->addImage($im3);
$im->addImage($im2);
$im4=$im->mosaicImages();

/* 切り取り */
$im4->cropImage($im->getImageWidth(),
$im->getImageHeight(), 0, 0);

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

</body>
</html>


元画像(sf.jpg)


出力画像(sample770a.png)


関連項目
ImageMagickで凹んだ影付き角丸四角を描画する (convertコマンドによる同様の処理)

groovyでマーブルテクスチャを作成する

groovyでマーブルテクスチャを作成するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample872a.png", 200, 200){
antialias("on")
rect( x: 0, y: 0, width: 200, height: 200,
borderColor: no, fill:color("green")){
filters {
marbleTexture(angle:10, scale:20, stretch:7, turbulence:2)
}
}
}


出力画像(sample872a.png)
groovyでマーブルテクスチャを作成

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

関連項目
groovyで画像にミニマムフィルタをかける