Saturday, July 05, 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>sample489(ImageMagick6.4.2)</title>
</head>
<body>
<?php
/* 画像の端を円形にぼかす */
$im = new Imagick("sf.jpg");
$im->vignetteImage(0, 1, 10, 10);
$im->writeImage('sample489a.jpg');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();

/* 背景を水色に */
$im2 = new Imagick("sf.jpg");
$im2->setImageBackgroundColor("#bbddff");
$im2->vignetteImage(0, 1, 10, 10);
$im2->writeImage('sample489b.jpg');
/* $im2->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im2->destroy();

?>

<img src="sample489a.jpg" />
<img src="sample489b.jpg" />

</body>
</html>

元画像(sf.jpg)


出力画像1(sample489a.jpg)


出力画像(sample489b.jpg)


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

関連項目
ImageMagickとPHPで、画像を丸く切り取る
ImageMagickで円形に端をぼかす (Convertコマンドによる同様の処理)

Friday, July 04, 2008

ImageMagickとPHPで透過PNGに影付けして、影にモーションブラーをかける

Imagickで透過PNGに影付けして、影にモーションブラーをかけるには、以下のコードを実行します。

<!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>sample488(ImageMagick6.4.2)</title>
</head>
<body>
<?php
/* 透過PNGに影付けして、影にモーションブラーをかける */
/* 透過PNGと大きめのサイズの透明イメージを重ね合わせる */
$im = new Imagick("sample2.png");
$ime = new Imagick();
$ime->newImage($im->getImageWidth()+50, $im->getImageHeight()+50, 'none');
$ime->compositeImage($im, Imagick::COMPOSITE_DEFAULT, 25, 25);

/* 影つけ&モーションブラー */
$im2=$ime->clone();
$im2->setImageBackgroundColor('black');
$im2->shadowImage(40,2,3,3);
$im2->motionBlurImage(0,20,225);

/* 背景用イメージ作成と重ね合わせ */
$im3 = new Imagick();
$im3->newImage($im->getImageWidth()+50, $im->getImageHeight()+50, 'white');
$im3->addImage($im2);
$im3->addImage($ime);
$im4=$im3->mosaicImages();
$im4->writeImage('sample488a.jpg');

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

<img src="sample488a.jpg" />

</body>
</html>

元画像(sample2.png)


出力画像(sample488a.jpg)



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

関連項目
ImageMagickで画像に影付けしてモーションブラーをかける (Convertコマンドによる同様の処理)

Java2Dで角丸四角を描画する

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

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

public class Java2DTest4
{
public static void main(String args[])
throws Exception
{
/* 角丸四角の画像を生成 */
BufferedImage img = new BufferedImage(
100, 100, BufferedImage.TYPE_INT_BGR
);
Graphics2D gr = img.createGraphics();
/* 背景を白で塗りつぶし */
gr.setColor(Color.WHITE);
gr.fillRect(0, 0, 100, 100);

/* 描画色 */
gr.setColor(Color.ORANGE);
/* 角丸四角を描画 */
RoundRectangle2D rr = new RoundRectangle2D.Double(
0.0, 0.0, 100.0, 100.0, 20.0, 20.0);
gr.fill(rr);
gr.dispose();
ImageIO.write(img, "png", new File("sample484a.png"));
}
}

出力画像(sample484a.png)


環境
JDK6 Upadate6(JDK1.6.0_06)

Thursday, July 03, 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>sample487(ImageMagick6.4.2)</title>
</head>
<body>
<?php
/* 緑っぽい部分以外は白黒にする */
$im = new Imagick("sample8.jpg");
$im2 = $im->fxImage("(hue>0.19&&hue<0.47)?p:(r+g+b)/3");
$im2->writeImage('sample487a.jpg');
/* $im2->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im2->destroy();
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>

<img src="sample487a.jpg" />

</body>
</html>
元画像(sample8.jpg)


出力画像(sample487a.jpg)


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

関連項目
ImageMagickで任意の範囲の色相の色を残す (Convertコマンドでの同様の処理)

Java2Dで画像の一部を四角形で切り取る

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

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

public class Java2DTest3
{
public static void main(String args[])
throws Exception
{
/* 画像の一部を切り取り */
BufferedImage img = ImageIO.read(new File("sf.jpg"));
BufferedImage img2 = img.getSubimage(100, 100, 80, 80);
ImageIO.write(img2, "png", new File("sample483a.png"));
}
}

元画像(sf.jpg)


出力画像(sample483a.png)


環境
JDK6 Upadate6(JDK1.6.0_06)

Wednesday, July 02, 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>sample486(ImageMagick6.4.1)</title>
</head>
<body>
<?php
/* 画像にモーションブラーをかける */
$im = new Imagick("sf2.jpg");
$im->motionBlurImage(0,3,-10);
$im->writeImage('sample486a.png');
/* $im->clear(); 2008/09/30追記:destroyと同様にClearMagicWandを呼ぶので必要なし */
$im->destroy();
?>

<img src="sample486a.png" />

</body>
</html>

元画像(sf2.jpg)


出力画像(sample486a.png)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.1

関連項目
ImageMagickとPHPで、画像をぼかす

Java2Dで画像の大きさを変える

Java2Dで画像の大きさを変えるには、以下のコードを実行します。

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

public class Java2DTest2
{
public static void main(String args[])
throws Exception
{
/* 画像をリサイズ */
BufferedImage img = ImageIO.read(new File("sf.jpg"));
BufferedImage img2 = new BufferedImage(
110, 110, BufferedImage.TYPE_INT_BGR
);
Graphics2D gr = img2.createGraphics();
gr.drawImage(img, 0, 0, img2.getWidth(), img2.getHeight(), null);
gr.dispose();
ImageIO.write(img2, "png", new File("sample482a.png"));
}
}

元画像(sf.jpg)


出力画像(sample482a.png)


環境
JDK6 Upadate6(JDK1.6.0_06)

Tuesday, July 01, 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>sample485(ImageMagick6.4.1)</title>
</head>
<body>
<?php
/* 画像を波型に切り取る */
$im = new Imagick("sf2.jpg");
$im2 = new Imagick();
/* 幅・高さを入れ替えてイメージを作成 */
$im2->newImage($im->getImageHeight(), $im->getImageWidth(), "none");
$idraw = new ImagickDraw();
/* 塗りつぶし色設定 */
$idraw->setFillColor('white');
$idraw->rectangle(0, 0, $im->getImageHeight()-1, ($im->getImageWidth()-1)/2);
$im2->drawImage($idraw);
$im2->waveImage(10, $im->getImageHeight());
$im2->cropImage($im->getImageHeight(), $im->getImageWidth(), 0, 0);
$idraw->rectangle(0, 0, $im->getImageHeight()-1, ($im->getImageWidth()-1)/2);
$im2->drawImage($idraw);
$im2->negateImage(true);

$im->rotateImage('none', 90);
$im2->compositeImage($im, Imagick::COMPOSITE_SCREEN, 0, 0, Imagick::CHANNEL_ALL);
$im2->rotateImage('none', -90);


$im2->writeImage('sample485a.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="sample485a.png" />

</body>
</html>

元画像(sf2.jpg)


出力画像(sample485a.png)


環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.1

Java2Dで画像の明るさを変える

Java2Dで画像の明るさを変えるには、以下のコードを実行します。

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

public class Java2DTest1
{
public static void main(String args[])
throws Exception
{
/* 以下のコードだとVMごと落ちる。。
http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=f12925b11cbbb174e5ed576d2149?bug_id=4886506
BufferedImage img = ImageIO.read(new File("sf.jpg"));
RescaleOp ro = new RescaleOp(0.5f, 0.0f, null);
BufferedImage img2 = ro.filter(img, img2);
ImageIO.write(img, "png", new File("sample474a.png"));
*/
BufferedImage img = ImageIO.read(new File("sf.jpg"));
BufferedImage img2 = new BufferedImage(
img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_BGR
);
Graphics2D gr = img2.createGraphics();
gr.drawImage(img,0,0,null);
gr.dispose();
RescaleOp ro = new RescaleOp(0.5f, 0.0f, null);
BufferedImage img3 = ro.filter(img2, null);
ImageIO.write(img3, "png", new File("sample474a.png"));
}
}

元画像(sf.jpg)


出力画像(sample474a.png)


環境
JDK6 Upadate6(JDK1.6.0_06)

Monday, June 30, 2008

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

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

require 'RMagick'
include Magick

img = Image.new(100, 100){
self.background_color = 'white'
}

dr = Draw.new
# フィル色
dr.fill = "none"
# ストローク色
dr.stroke = "#ccddff"
# 点線のパターン
dr.stroke_dasharray(3,4)
# 線の幅
dr.stroke_width(2)
# 角丸四角を描画
dr.roundrectangle(5, 5, 95, 95, 10, 10)
dr.draw(img)

img.write("sample481a.jpg")

exit

出力画像(sample481a.jpg)


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

関連項目
ImageMagickで点線の角丸四角を描画する - その1

Sunday, June 29, 2008

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

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

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

public class JMagickTest39
{
public static void main(String args[])
throws MagickException
{
MagickImage mi = new MagickImage(new ImageInfo("sf.jpg"));
int iw = (int)mi.getDimension().getWidth();
int ih = (int)mi.getDimension().getHeight();

/* マスク画像で切り取り */
MagickImage mi2 = new MagickImage(new ImageInfo("mask.bmp"));
mi2.negateImage(1);
byte data[] = new byte[iw*ih*4];
mi2.dispatchImage(0, 0, iw, ih, "RGBA", data);
int ind = 0;
for(ind=0;ind<iw*ih*4;ind+=4){
/* alphaをredと同じ値に */
data[ind+3] = data[ind+0];
}
mi2.constituteImage(iw, ih, "RGBA", data);

mi2.compositeImage(CompositeOperator.SrcInCompositeOp,mi,0,0);
/* 元画像を白黒化 */
QuantizeInfo qi = new QuantizeInfo();
qi.setColorspace(ColorspaceType.GRAYColorspace);
mi.quantizeImage(qi);
mi.compositeImage(CompositeOperator.SrcOverCompositeOp,mi2,0,0);
mi.setFileName("sample480a.png");
mi.writeImage(new ImageInfo());
}
}

元画像(sf.jpg)


マスク画像(mask.bmp)


出力画像(sample480a.png)


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


関連情報
JMagickまとめ
ImageMagickで、マスクした部分を白黒に変換する (Convertコマンドで同様の処理)