Saturday, July 26, 2008

ImageMagickで画像をストライプ上にずらす

画像をストライプ上にずらすには、以下のコードを実行します。

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

%im%\convert.exe sf.jpg -background white -gravity south -splice 0x4 -virtual-pixel background -fx "i%%16<8?p[0,-4]:p" sample513a.png

元画像(sf.jpg)


出力画像(sample513a.png)

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>sample512(ImageMagick6.4.2)</title>
</head>
<body>
<?php
/* 座標を少しずつずらして、複数のベジェ曲線を描画 */
$im = new Imagick();
$im->newPseudoImage(200, 200, "xc:white");

$idraw = new ImagickDraw();
$idraw->setStrokeColor('#88bbff50');
$idraw->setFillColor('none');

$ct=10;
for($ind=0;$ind<$ct;$ind++){
$points[0] = array(
'x' => 30+5*$ind,
'y' => 200
);
$points[1] = array(
'x' => 0,
'y' => 100
);
$points[2] = array(
'x' => 0,
'y' => 20
);
$points[3] = array(
'x' => 200,
'y' => 100+3*$ind
);
$idraw->bezier($points);
}

$im->drawImage($idraw);

$im->writeImage('sample512a.jpg');

/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>

<img src="sample512a.jpg" />

</body>
</html>

出力画像(sample512a.jpg)


動作環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.2

関連項目
ImageMagickとPHPでベジェ曲線を描画する

Java2Dで画像をぼかす

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

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

public class Java2DTest10
{
public static void main(String args[])
throws Exception
{
/* Java2Dで画像をぼかす */
BufferedImage img = ImageIO.read(new File("sf.jpg"));
BufferedImage img2 = new BufferedImage(
img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB
);
Graphics2D gr = img2.createGraphics();
gr.drawImage(img,0,0,null);
gr.dispose();

float kernel[] = new float[3*3];
for(int li=0;li<3*3;li++){
kernel[li] = 1F/(3*3);
}

BufferedImageOp bio = new ConvolveOp(new Kernel(3, 3, kernel),
ConvolveOp.EDGE_NO_OP, new RenderingHints(new HashMap()));
BufferedImage img3 = bio.filter(img2, null);
ImageIO.write(img3, "jpg", new File("sample511a.jpg"));

}
}

元画像(sf.jpg)


出力画像(sample511a.jpg)


環境
JDK6 Upadate6(JDK1.6.0_06)

Friday, July 25, 2008

Java2Dで画像を角丸四角で切り取る

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

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

public class Java2DTest9
{
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 gr = img2.createGraphics();
gr.setColor(new Color(1F, 1F, 1F, 1F));
RoundRectangle2D rr = new RoundRectangle2D.Double(
0.0, 0.0, img.getWidth()-1, img.getHeight()-1, 40.0, 40.0);
gr.fill(rr);
/* 切り取り */
gr.setComposite(AlphaComposite.SrcIn);
gr.drawImage(img,0,0,null);
gr.dispose();
/* 白色背景画像を作成 */
BufferedImage img3 = new BufferedImage(
img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB
);
Graphics2D gr2 = img3.createGraphics();
gr2.setColor(new Color(255, 255, 255));
gr2.fillRect(0, 0, img.getWidth(), img.getHeight());
/* 切り取った画像と合成 */
gr2.drawImage(img2,0,0,null);
gr2.dispose();
ImageIO.write(img3, "jpg", new File("sample510a.jpg"));
}
}

元画像(sf.jpg)


出力画像(sample510a.jpg)


環境
JDK6 Upadate6(JDK1.6.0_06)

Thursday, July 24, 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>sample509(ImageMagick6.4.2)</title>
</head>
<body>
<?php
/* 点線の角丸四角を描画する */
$sx = 100;
$sy = 100;
$px = 5;
$py = 5;
$rx = 10;
$ry = 10;

$im = new Imagick();
$im->newImage($sx, $sy, "white");
$idraw = new ImagickDraw();
/* 塗りつぶし色 */
$idraw->setFillColor('none');
/* 線の色 */
$idraw->setStrokeColor('#bbddff');
/* 点線のスタイル */
$idraw->setStrokeDashArray(array(3,4));
/* 線の幅 */
$idraw->setStrokeWidth(2);
$idraw->roundrectangle($px, $py, $sx-$px, $sy-$py, $rx, $ry);
$im->drawImage($idraw);

$im->writeImage('sample509a.jpg');
/* $idraw->clear(); 2008/09/30追記:destroyと同様にClearDrawingWandを呼ぶので必要なし */
$idraw->destroy();
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();?>

<img src="sample509a.jpg" />

</body>
</html>

出力画像(sample509a.jpg)


動作環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.2

関連項目
ImageMagickで点線の角丸四角を描画する - その1 (Convertコマンドでの同様の処理)

Wednesday, July 23, 2008

JMagickでバンド状のグラデーションを描画する

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

import magick.*;

public class JMagickTest41
{
public static void main(String args[])
throws MagickException
{
/* バンド状のグラデーションを描画する */
ImageInfo ii = new ImageInfo("gradient:#FFFF10FF-#3070A0FF");
ii.setSize("1x10");
MagickImage mi = new MagickImage(ii);
/* フィルタタイプをPointFilterに設定 */
mi.setFilter(FilterType.PointFilter);
MagickImage mi2 = mi.scaleImage(150, 150);
mi2.setFileName("sample508a.jpg");
mi2.writeImage(new ImageInfo());
}
}
出力画像(sample508a.jpg)


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


関連情報
JMagickまとめ
ImageMagickでバンド状のグラデーションを作成する (Convertコマンドでの同様の処理)
ImageMagickでバンド状にグラデーションのかかった文字を描画する

Tuesday, July 22, 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>sample507(ImageMagick6.4.2)</title>
</head>
<body>
<?php
/* 手塗り風の四角を描画する */
$sx = 200;
$sy = 200;
$px = 10;
$py = 10;
$im = new Imagick();
$im->newImage($sx, $sy, "white");
$idraw = new ImagickDraw();
$idraw->setFillColor('#bbddff');
$idraw->rectangle($px, $py, $sx-$px, $sy-$py);
$im->drawImage($idraw);
$im->spreadImage(5);
$im->medianFilterImage(3);

$im->writeImage('sample507a.jpg');
/* $idraw->clear(); 2008/09/30追記:destroyと同様にClearDrawingWandを呼ぶので必要なし */
$idraw->destroy();
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>

<img src="sample507a.jpg" />

</body>
</html>

出力画像(sample507a.jpg)


動作環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.2

関連項目
ImageMagickとPHPで手書き風の円に囲まれた文字を描画する
ImageMagickで、手塗り風の四角を描画する (Convertコマンドでの同様の処理)

Sunday, July 20, 2008

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>sample506(ImageMagick6.4.2)</title>
</head>
<body>
<?php
/* 画像の端をかすれたように処理する */
$im = new Imagick('sf2.jpg');

/* かすれた矩形領域のマスクを作成 */
$px = 10;
$py = 10;
$im2 = new Imagick();
$im2->newImage($im->getImageWidth(), $im->getImageHeight(), "none");
$idraw = new ImagickDraw();
$idraw->setFillColor('#ffffff');
$idraw->rectangle($px, $py, $im->getImageWidth()-$px, $im->getImageHeight()-$py);
$im2->drawImage($idraw);
$im2->spreadImage(2);
/* マスクを使用して切り取り */
$im2->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);

$im2->writeImage('sample506a.png');
/* $idraw->clear(); 2008/09/30追記:destroyと同様にClearDrawingWandを呼ぶので必要なし */
$idraw->destroy();
/* $im2->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im2->destroy();
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();?>

<img src="sample506a.png" />

</body>
</html>

元画像(sf2.jpg)


出力画像(sample506a.png)


動作環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.2

関連項目
ImageMagickで、画像の端をかすれたように処理する (Convertコマンドによる同様の処理)
ImageMagickとPHPで文字列をクレヨン風に描画する