Showing posts with label JMagick. Show all posts
Showing posts with label JMagick. Show all posts

Monday, July 04, 2011

JMagickまとめ

画像操作・変形


画像の大きさを変更する
画像を回転させる
画像を上下・左右にスクロールさせる
画像の上下反転左右反転をする
画像をかたむける
画像を波型に揺らす

パターン生成


プラズマフラクタル画像を生成する
画像をタイル配置する
ビルトインパターンの画像を生成する

グラデーション


グラデーション画像を生成する
バンド状のグラデーションを描画する
画像の指定した点から円形のバンド状に明るさを変える

グレースケール・明度・彩度


画像を2値化する
2値化した画像の黒色部分の色を変え白色分を透明にする
画像をグレースケールに変換する
マスクした部分を白黒にする
画像の彩度を右方向へ徐々に落とす
画像のコントラストを上げる
明度・彩度・色相を変更する

画像処理


画像を油絵調に変換する
画像を木炭画調に変換する
画像に色を着色する
画像のエッジ抽出をする
メディアンフィルタを適用する
画像の色を減色する
画像をセピア調っぽく変換する

画像描画


JMgickで角丸四角を描画する
画像の上に文字列を描画する
タイルパターンの文字列を描画する
手塗り風の四角を描画する

切り取り


画像を丸く切り取る
画像の一部を四角に切り取る
画像を角丸四角に切り取る
画像を切り落とす

重ね合わせ


画像を重ね合わせる
画像を半透明にして重ね合わせる
半透明の青いぼかしを重ね合わせる

その他


画像の端を暗くする
画像を2値化してメッシュ状にした透過PNGを生成する
画像の輪郭を影で浮かび上がらせた画像を生成する
画像の端がかすれたような処理をする
画像をビデオ風にする
文字列画像を作成する
画像に枠をつける
アニメーションGIFを出力する
画像のqualityを指定して保存する
ImageMagickをJavaから使用するための設定(JMagickインストール)

Thursday, January 15, 2009

JMagickで画像の色を減色する

JMagickで画像の色を減色するには、以下のコードを実行します。


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

public class JMagickTest47
{
public static void main(String args[])
throws MagickException
{
/* 画像の色数を減色する */
MagickImage mi = new MagickImage(new ImageInfo("sf.jpg"));
QuantizeInfo qi = new QuantizeInfo();
qi.setColorspace(ColorspaceType.RGBColorspace);
/* ディザあり */
qi.setDither(1);
/* 色数 */
qi.setNumberColors(32);
qi.setTreeDepth(0);
qi.setMeasureError(0);
mi.quantizeImage(qi);
mi.setFileName("sample748a.gif");
mi.writeImage(new ImageInfo());
}
}


元画像(sf.jpg)


出力画像(sample748a.gif)


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

Monday, January 12, 2009

JMagickでタイルパターンの文字列を描画する

JMagickでタイルパターンの文字列を描画するには、以下のコードを実行します。


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

public class JMagickTest46
{
public static void main(String args[])
throws MagickException
{
/* タイルパターンの文字列を描画する */
ImageInfo ii = new ImageInfo("xc:#fad759");
ii.setSize("300x80");
DrawInfo di = new DrawInfo(ii);
/* フォント指定(パスは環境によって変えてね) */
// di.setFont("c:\\winnt\\fonts\\msgothic.ttc");
di.setFont("Tahoma");
/* ポイントサイズ指定 */
di.setPointsize(50);
/* パターン設定指定 */
MagickImage tile = new MagickImage(
new ImageInfo("pattern1.gif")
);
di.setTile(tile);
/* Gravity設定 */
di.setGravity(GravityType.NorthWestGravity);
/* 位置指定 */
di.setGeometry("+5+0");
/* テキスト設定 */
di.setText("ImageMagick");
MagickImage mi = new MagickImage(ii);
mi.annotateImage(di);
mi.setFileName("sample747a.jpg");
/* jpegのqualityを90に設定して保存 */
ImageInfo oii = new ImageInfo();
oii.setQuality(90);
mi.writeImage(oii);
}
}


パターン画像(pattern1.gif)


出力画像(sample747a.jpg)


関連情報
JMagickまとめ

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でクレヨン風の文字列を描画する

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 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まとめ

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まとめ

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 08, 2008

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

JMagickで画像の指定した点から円形のバンド状に明るさを変えるには、以下のコードを実行します。

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

public class JMagickTest40
{
public static void main(String args[])
throws MagickException
{
/* 画像の指定した点から円形のバンド状に明るさを変える */
/* 円の中心 */
int cx = 130;
int cy = 160;
/* 半径初期値 */
int ir = 30;
/* 半径増分値 */
int dr = 20;
/* 明るさ */
int il = 100;
/* 明るさ増分値 */
int dl = -10;
/* 繰り返し回数 */
int ct = 8;
/* 読み込み画像名 */
String fn = "sf.jpg";

MagickImage images[] = new MagickImage[ct+1];
images[0] = new MagickImage(new ImageInfo(fn));
int w = (int)images[0].getDimension().getWidth();
int h = (int)images[0].getDimension().getHeight();
int lc = 0;
for(lc=ct;lc>=1;lc--){
MagickImage mi = new MagickImage(new ImageInfo(fn));
/* 円形に切り取るマスクを作成 */
ImageInfo ii = new ImageInfo("xc:none");
ii.setSize(w + "x" + h);
DrawInfo di = new DrawInfo(ii);
di.setFill(PixelPacket.queryColorDatabase("white"));
di.setPrimitive("ellipse " + cx + "," + cy + "," +
ir + "," + ir + ",0,360");
images[lc] = new MagickImage(ii);
images[lc].drawImage(di);
/* マスクを使用して切り取り */
images[lc].compositeImage(CompositeOperator.SrcInCompositeOp,
mi,0,0);
images[lc].modulateImage(il + ",100,100");
ir += dr;
il += dl;
}
images[0].modulateImage(il + ",100,100");
/* すべてのイメージを重ね合わせ */
for(lc=1;lc<=ct;lc++){
images[0].compositeImage(CompositeOperator.SrcOverCompositeOp,
images[lc], 0, 0);
}
images[0].setFileName("sample492a.jpg");
images[0].writeImage(new ImageInfo());
}
}

元画像(sf.jpg)


出力画像(sample492a.jpg)


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


関連情報
JMagickまとめ
JMagickで、明度・彩度・色相を変更する

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コマンドで同様の処理)

Saturday, June 28, 2008

JMagickでアニメーションGIFを出力する

JMagickでアニメーションGIFを出力するには、以下のコードを実行します。

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

public class JMagickTest38
{
public static void main(String args[])
throws MagickException
{
String files[] = {"sample3b.jpg", "sample4.jpg", "sample6.jpg"};
MagickImage frames[] = new MagickImage[files.length];
int fn = 0;
for(fn=0;fn<files.length;fn++){
frames[fn] = new MagickImage(new ImageInfo(files[fn]));
frames[fn].setDelay(100);
}
MagickImage mi = new MagickImage(frames);
mi.setFileName("sample479a.gif");
mi.writeImage(new ImageInfo());
}
}

元画像1(sample3b.jpg)


元画像2(sample4.jpg)


元画像3(sample6.jpg)


出力画像(sample479a.gif)


環境
JDK6 Upadate6(JDK1.6.0_06)/jmagick-win-6.3.9-Q16
関連情報
JMagickまとめ

Sunday, June 22, 2008

JMagickで画像の彩度を右方向へ徐々に落とす

JMagickで画像の彩度を右方向へ徐々に落とすには、以下のコードを実行します。

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

public class JMagickTest37
{
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();
/* 半透明グラデーションを作成 */
ImageInfo ii = new ImageInfo("gradient:#00000000-#ffffffff");
ii.setSize(ih + "x" + iw);
MagickImage mi2 = new MagickImage(ii);
MagickImage mi3 = mi2.rotateImage(90);
mi.compositeImage(CompositeOperator.CopyOpacityCompositeOp,mi3,0,0);

/* 彩度をおとした画像を生成 */
MagickImage mi4 = new MagickImage(new ImageInfo("sf.jpg"));
mi4.modulateImage("100,10,100");

mi4.compositeImage(CompositeOperator.SrcOverCompositeOp,mi,0,0);

mi4.setFileName("sample473a.jpg");
mi4.writeImage(new ImageInfo());
}
}

元画像(sf.jpg)


出力画像(sample473a.jpg)


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


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)
ImageMagickで、上・下・左・右に徐々に彩度を落とす (Convertコマンドによる同様の処理)

Tuesday, June 17, 2008

JMagickで文字列画像を作成する

JMagickで文字列画像を生成するには、以下のコードを実行します。

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

public class JMagickTest36
{
public static void main(String args[])
throws MagickException
{
ImageInfo ii = new ImageInfo("label:てすと");
/* フォント指定 */
ii.setFont("c:\\winnt\\fonts\\msgothic.ttc");
/* ポイントサイズ指定 */
ii.setPointSize(30);

/* ラベルに合わせて文字列画像を作成 */
MagickImage mi = new MagickImage(ii);

/* 色を変更 */
int iw = (int)mi.getDimension().getWidth();
int ih = (int)mi.getDimension().getHeight();
byte data[] = new byte[iw*ih*4];
mi.dispatchImage(0, 0, iw, ih, "RGBA", data);
int ind = 0;
for(ind=0;ind<iw*ih*4;ind+=4){
/* 真っ白ではないピクセルを水色に */
if( data[ind] != (byte)0xff &&
data[ind+1] != (byte)0xff &&
data[ind+2] != (byte)0xff ){
data[ind+3] = data[ind+0];
data[ind] = (byte)0xbb;
data[ind+1] = (byte)0xdd;
data[ind+2] = (byte)0xff;
}
}
mi.constituteImage(iw, ih, "RGBA", data);

mi.setFileName("sample467a.jpg");
mi.writeImage(new ImageInfo());
}
}

出力画像(sample467a.jpg)


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


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)

Monday, June 16, 2008

JMagickで画像をセピア調っぽく変換する

JMagickで画像をセピア調っぽく変換するには、以下のコードを実行します。

import magick.*;

public class JMagickTest34
{
public static void main(String args[])
throws MagickException
{
MagickImage mi = new MagickImage(new ImageInfo("sf.jpg"));

/* 画像を白黒に */
QuantizeInfo qi = new QuantizeInfo();
qi.setColorspace(ColorspaceType.GRAYColorspace);
mi.quantizeImage(qi);
/* 着色 */
MagickImage mo = mi.colorizeImage("60%",
new PixelPacket(0xf8*256, 0xc7*256, 0x49*256, 0));

mo.setFileName("sample465a.png");
mo.writeImage(new ImageInfo());

}
}

元画像(sf.jpg)


出力画像(sample465a.png)


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


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)
JMagickで画像をグレースケールに変換する
JMagickで画像に色を着色する

Wednesday, June 04, 2008

JMagickで画像の端を暗くする

JMagickで画像の端を暗くするには、以下のコードを実行します。

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

public class JMagickTest35
{
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();
int d = 10;

ImageInfo ii = new ImageInfo("xc:black");
ii.setSize(iw + "x" + ih);
MagickImage mi1 = new MagickImage(ii);
/* 枠描画 */
mi1.setBorderColor(PixelPacket.queryColorDatabase("white"));
MagickImage mi2 = mi1.borderImage(new Rectangle(d, d));

/* ぼかして中央を透明に */
int tw = iw+d*2;
int th = ih+d*2;
MagickImage mi3 = mi2.blurImage(0, 10);
byte data[] = new byte[tw*th*4];
mi3.dispatchImage(0, 0, tw, th, "RGBA", data);
int ind = 0;
for(ind=0;ind<tw*th*4;ind+=4){
data[ind+3] = data[ind+0];
data[ind] = (byte)0;
data[ind+1] = (byte)0;
data[ind+2] = (byte)0;
}
mi3.constituteImage(tw, th, "RGBA", data);

/* 中央部分を切り取り */
Rectangle rec = new Rectangle(d, d, iw+d-1, ih+d-1);
MagickImage mi4 = mi3.cropImage(rec);

/* 画像と重ね合わせ */
mi.compositeImage(CompositeOperator.SrcOverCompositeOp,mi4,0,0);

mi.setFileName("sample466a.jpg");
mi.writeImage(new ImageInfo());
}
}

元画像(sf.jpg)


出力画像(sample466a.jpg)


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


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)

Wednesday, May 28, 2008

JMagickで、画像を2値化してメッシュ状にした透過PNGを生成する

JMagickで、画像を2値化してメッシュ状にした透過PNGを生成するには、以下のコードを実行します。

import magick.*;

public class JMagickTest33
{
public static void main(String args[])
throws MagickException
{
MagickImage mi = new MagickImage(new ImageInfo("tree1.jpg"));
/* 画像を2値化 */
mi.thresholdImage(40000);

/* 画像のピクセルを取得 */
int iw = (int)mi.getDimension().getWidth();
int ih = (int)mi.getDimension().getHeight();
byte data[] = new byte[iw*ih*4];
mi.dispatchImage(0, 0, iw, ih, "RGBA", data);
int lx, ly;
for(ly=0;ly<ih;ly++){
for(lx=0;lx<iw;lx++){
if( lx%2 == 0 && ly%2 == 0 &&
data[ly*iw*4+lx*4] == 0 ){
/* 黒色部分でx,yが2で割り切れる場合 */
data[ly*iw*4+lx*4]=(byte)0x30;
data[ly*iw*4+lx*4+1]=(byte)0x70;
data[ly*iw*4+lx*4+2]=(byte)0xa0;
data[ly*iw*4+lx*4+3]=(byte)0xff;
} else {
data[ly*iw*4+lx*4]=0;
data[ly*iw*4+lx*4+1]=0;
data[ly*iw*4+lx*4+2]=0;
data[ly*iw*4+lx*4+3]=0;
}
}
}
mi.constituteImage(iw, ih, "RGBA", data);

mi.setFileName("sample461a.png");
mi.writeImage(new ImageInfo());

/* 重ね合わせ例 */
MagickImage mi2 = new MagickImage(new ImageInfo("sf2.jpg"));
mi2.compositeImage(CompositeOperator.SrcOverCompositeOp,mi,0,0);
mi2.setFileName("sample461b.png");
mi2.writeImage(new ImageInfo());

}
}


元画像(tree1.jpg)


出力画像(sample461a.png)


ほかの画像と重ね合わせ例(sample461b.png)


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


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)
ImageMagickで、画像を2値化してメッシュ状にした透過PNGを生成する (Convertコマンドで同様の処理を実行)

Monday, May 26, 2008

JMagickで半透明の青いぼかしを重ね合わせる

JMagickで半透明の青いぼかしを重ね合わせるには、以下のコードを実行します。

import magick.*;

public class JMagickTest32
{
public static void main(String args[])
throws MagickException
{
MagickImage mi = new MagickImage(new ImageInfo("sample8.jpg"));
/* 画像を2値化 */
mi.thresholdImage(53000);
mi.setMatte(true);
/* 白色を透明に変換 */
mi.opaqueImage(
PixelPacket.queryColorDatabase("white"),
new PixelPacket(65535, 65535, 65535, 50000)
);
/* 黒色を半透明水色に変換 */
mi.opaqueImage(
PixelPacket.queryColorDatabase("black"),
new PixelPacket(0x44*256, 0x55*256, 0xff*256, 22767)
);
/* ぼかし */
MagickImage mi2 = mi.blurImageChannel(0xff/*=AllChannels*/,0, 4);

MagickImage mi3 = new MagickImage(new ImageInfo("sample8.jpg"));
mi3.compositeImage(CompositeOperator.SrcOverCompositeOp,mi2,0,0);

mi3.setFileName("sample460a.png");
mi3.writeImage(new ImageInfo());
}
}

元画像(sample8.jpg)


出力画像(sample460a.png)



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


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)
ImageMagickで半透明の青いぼかしを重ね合わせる (Convertコマンドで似たような処理)

Friday, May 23, 2008

JMagickで画像の輪郭を影で浮かび上がらせた画像を生成する

JMagickで画像の輪郭を影で浮かび上がらせた画像を生成するには、以下のコードを実行します。

import magick.*;

public class JMagickTest31
{
public static void main(String args[])
throws MagickException
{
MagickImage mi = new MagickImage(new ImageInfo("tree1.jpg"));
/* 画像を2値化 */
mi.thresholdImage(40000);
/* 白色を水色に変換 */
mi.opaqueImage(
PixelPacket.queryColorDatabase("white"),
new PixelPacket(0x30*256, 0x70*256, 0xa0*256, 0)
);
/* 黒色を白色に変換 */
mi.opaqueImage(
PixelPacket.queryColorDatabase("black"),
PixelPacket.queryColorDatabase("white")
);
/* ぼかし */
MagickImage mi2 = mi.blurImage(0, 3);

MagickImage mi3 = new MagickImage(new ImageInfo("tree1.jpg"));
/* 画像を2値化 */
mi3.thresholdImage(40000);
/* 白色を透明に変換 */
mi3.opaqueImage(
PixelPacket.queryColorDatabase("white"),
new PixelPacket(65535, 65535, 65535, 65535)
);
/* 黒色を水色に変換 */
mi3.opaqueImage(
PixelPacket.queryColorDatabase("black"),
new PixelPacket(0x30*256, 0x70*256, 0xa0*256, 0)
);

mi2.compositeImage(CompositeOperator.SrcOverCompositeOp,mi3,0,0);

mi2.setFileName("sample451a.png");
mi2.writeImage(new ImageInfo());
}
}

元画像(tree1.jpg)


出力画像(sample451a.png)


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


関連情報
JMagickまとめ
JMagickで2値化した画像の黒色部分の色を変え、白色分を透明にする
ImageMagickで、画像の輪郭を影で浮かび上がらせた画像を生成する (Convertコマンド)

JMagickで画像をビデオ風にする

JMagickで画像をビデオ風にするには、以下の処理を実行します。

import magick.*;

public class JMagickTest30
{
public static void main(String args[])
throws MagickException
{
/* 画像をビデオ風にする */
/* 1x2pixelの半透明模様を作成 */
ImageInfo ii = new ImageInfo("none");
ii.setSize("1x2");
MagickImage mi = new MagickImage(ii);
byte data[] = {
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x80,
(byte)0xff, (byte)0xff, (byte)0xff, (byte)0x00
};
mi.constituteImage(1, 2, "RGBA", data);

/* tileで画像上に描画 */
MagickImage mi2 = new MagickImage(new ImageInfo("sf.jpg"));
DrawInfo di = new DrawInfo(ii);
di.setTile(mi);
di.setPrimitive("rectangle 0,0," +
mi2.getDimension().getWidth() + "," +
mi2.getDimension().getHeight());
mi2.drawImage(di);

mi2.setFileName("sample450a.png");
mi2.writeImage(new ImageInfo());
}
}

元画像(sf.jpg)


出力画像(sample450a.png)


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


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)

Thursday, May 22, 2008

JMagickで2値化した画像の黒色部分の色を変え、白色分を透明にする

JMagickで2値化した画像の黒色部分の色を変え、白色分を透明にするには以下のコードを実行します。

import magick.*;

public class JMagickTest29
{
public static void main(String args[])
throws MagickException
{
/* 2値化した画像の黒色部分を水色に、白色部分を透明にする */
MagickImage mi = new MagickImage(new ImageInfo("tree1.jpg"));
/* 画像を2値化 */
mi.thresholdImage(32767);
/* 黒色を水色に変換 */
mi.opaqueImage(
PixelPacket.queryColorDatabase("black"),
new PixelPacket(0xbb*256, 0xdd*256, 0xff*256, 0)
);
/* 白色を透明に変換 */
mi.opaqueImage(
PixelPacket.queryColorDatabase("white"),
new PixelPacket(65535, 65535, 65535, 65535)
);
mi.setFileName("sample449a.png");
mi.writeImage(new ImageInfo());

/* 市松模様と重ね合わせ */
ImageInfo ii = new ImageInfo("pattern:checkerboard");
ii.setSize(mi.getDimension().getWidth() + "x" +
mi.getDimension().getHeight());
MagickImage mi2 = new MagickImage(ii);
mi2.compositeImage(CompositeOperator.SrcOverCompositeOp,mi,0,0);
mi2.setFileName("sample449b.png");
mi2.writeImage(new ImageInfo());
}
}

出力画像(sample229a.png)


出力画像(sample229b.png)


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


関連情報
JMagickまとめ
ImageMagickをJavaから使用するための設定(JMagickインストール)
JMagickでビルトインパターンの画像を生成する
JMagickで画像を2値化する