Saturday, January 10, 2009

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>sample736(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 画像の左右をぎざぎざに切り取る */
$im = new Imagick("sf.jpg");

/* 左右がぎざぎざになったマスクを作成 */
$im2 = new Imagick();
$im2->newImage($im->getImageWidth(), 10, "none");
$im2->setImageMatte(true);
$idraw = new ImagickDraw();
$idraw->pushPattern('mask', 0, 0, $im->getImageWidth(), 10);
$idraw->setFillColor('white');
$points[] = array('x' => 0, 'y' => 0);
$points[] = array('x' => 5, 'y' => 5);
$points[] = array('x' => 1, 'y' => 9);
$points[] = array('x' => $im->getImageWidth()-1, 'y' => 9);
$points[] = array('x' => $im->getImageWidth()-1-5, 'y' => 5);
$points[] = array('x' => $im->getImageWidth()-1, 'y' => 0);
$idraw->polygon($points);
$idraw->popPattern();
$idraw->setFillPatternUrl('#mask');
$idraw->rectangle(0, 0, $im->getImageWidth(), $im->getImageHeight());

$im3 = new Imagick();
$im3->newImage($im->getImageWidth(), $im->getImageHeight(), "none");
$im3->setImageMatte(true);
$im3->drawImage($idraw);

/* マスクで画像を切り取り */
$im3->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);

$im3->writeImage('sample736a.png');

$idraw->destroy();
$im3->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample736a.png" />

</body>
</html>

元画像(sf.jpg)


出力画像(sample736a.png)

groovyで楕円を描画する

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample794a.png", 200, 200){
antialias("on")
ellipse( cx:100, cy:100, radiusx:80, radiusy:40,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}


出力画像(sample794a.png)
groovyで描画した楕円

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

関連項目
groovyで円を描画する
groovyでドーナツ型を描画する

Friday, January 09, 2009

RMagickでjpegのqualityを指定してファイルに保存する

RMagickでjpegのqualityを指定してファイルに保存するには、以下のコードを実行します。

require 'RMagick'
include Magick

# jpeg qualityの指定
img = Image.read("sf.jpg")
img[0].write("sample723a.jpg"){
self.quality=10
}

exit

元画像(sf.jpg)


出力画像(sample723a.jpg)


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

groovyで画像をスムースにする

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


import groovy.swing.j2d.*

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


元画像(sf.jpg)


出力画像(sample858a.png)


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

関連項目
groovyで画像に水面の波紋のような効果をかける

Thursday, January 08, 2009

groovyでドーナツ型を描画する

groovyでドーナツ型を描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample793a.png", 200, 200){
antialias("on")
donut( cx:100, cy:100, ir:50, or:90,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}
cx, cyで中心座標、irで内側の半径、orで外側の半径を指定します。

出力画像(sample793a.png)
groovyで描画したドーナツ型

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

関連項目
groovyで円を描画する
groovyで吹き出し画像を描画する
SVGRendererでドーナツ型を描画する (SVGRendererでの同様の処理)

librsvgを使用して画像を半透明にして重ね合わせる

librsvgを使用して画像を半透明にして重ね合わせるには、以下のsvgファイルを処理します。


<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="200" height="200">
<image x="0" y="0" width="200" height="200"
xlink:href="sf.jpg" >
<title>sf.jpg</title>
</image>
<image x="10" y="10" width="100" height="100"
xlink:href="sample3b.jpg" opacity="0.5">
<title>sample3b.jpg</title>
</image>
</svg>


コマンド
rsvg-convert image-opacity.svg -f png -o sample746a.png

元画像1(sf.jpg)


元画像2(sample3b.jpg)


出力画像(sample746a.png)


○関連項目
librsvgをwindowsで使用してSVGからPNG画像を生成する (librsvgをWindowsで使用する方法)
・libsvgに関する他の記事はこちらを参照してください。

Wednesday, January 07, 2009

groovyで画像を感光させたように加工する

groovyで画像を感光させたように加工するには、以下のコードを実行します。


import groovy.swing.j2d.*

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


元画像(sf.jpg)


出力画像(sample857a.png)
groovyで感光させたように加工した画像

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

関連項目
groovyで画像を2値化する
groovyで画像をシャープにする

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>sample735(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 円形のドット文字列を描画する */
/* 円形ドットのパターンを作成する */
$im = new Imagick();
$im->newImage(10, 10, "none");
$im->setImageMatte(true);
$idraw = new ImagickDraw();
$idraw->pushPattern('ellipse', 0, 0, 10, 10);
$idraw->setFillColor('white');
$idraw->ellipse(5, 5, 4, 4, 0,360);
$idraw->popPattern();
$idraw->setFillPatternUrl('#ellipse');
$idraw->rectangle(0, 0, 450, 120);

$im2 = new Imagick();
$im2->newImage(450, 120, "none");
$im2->drawImage($idraw);

/* 文字列を描画 */
$im3 = new Imagick();
$im3->newImage(45, 12, 'none');
$idraw2 = new ImagickDraw();
$idraw2->setFillColor('#bbddff');
/* フォント設定 */
$idraw2->setFont('Bitstream-Vera-Sans');
/* フォントサイズ設定 */
$idraw2->setFontSize(9);
/* gravity設定 */
$idraw2->setGravity(Imagick::GRAVITY_NORTH);
/* antialiasをoff*/
$idraw2->setStrokeAntialias(false);
/* 文字列描画 */
$idraw2->annotation(0, 0, "Sample");
$im3->drawImage($idraw2);

/* FILTER_POINTを使用してリサイズ */
$im3->resizeImage(450, 120, Imagick::FILTER_POINT, 1, false);

/* 円形ドットで文字列を切り取り */
$im2->compositeImage($im3, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);


$im2->writeImage('sample735a.png');

$idraw2->destroy();
$idraw->destroy();
$im3->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample735a.png" />

</body>
</html>

出力画像(sample735a.png)


関連項目
ImageMagickとPHPで画像の上に半透明の荒いドットの文字列を描画する
ImageMagickとPHPで半透明の吹き出しを描画する
ImageMagickとPHPで青白く輝く文字列を描画する

Tuesday, January 06, 2009

RMagickで画像の色数を減色する

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

require 'RMagick'
include Magick

# 32色に減色
img = Image.read("sf.jpg")
img2 = img[0].quantize(32);

img2.write("sample722a.png")

exit

元画像(sf.jpg)


出力画像(sample722a.png)


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

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

groovyでイルカの形を描画する

groovyでイルカの形を描画するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample792a.png", 200, 200){
antialias("on")
dolphinShape( x:0, y:20, width:200, height:160,
fill: color("#bbddff"),
borderColor: color("#103080"),
borderWidth: 2
)
}


出力画像(sample792a.png)
groovyで描画したイルカの画像

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

関連項目
groovyで十字形を描画する
groovyで円を描画する
groovyで蝶を描画する

Monday, January 05, 2009

groovyで画像にスタンプフィルタをかける

groovyで画像にスタンプフィルタをかけるには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample856a.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 {
stamp(radius:4, softness:0.5, threshold: 0.5,
white: color("#f0f0ff"), black: color("#4477aa") )
}
}
}


元画像(sf.jpg)


出力画像(sample856a.png)
groovyでスタンプフィルタをかけた画像

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

関連項目
groovyで画像を2値化する
groovyで画像に水面の波紋のような効果をかける
groovyで画像に放射ブラーをかける

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

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


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

public class Java2DTest21
{
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);

/* レンダリングヒントを設定 */
RenderingHints rh = new
RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);

rh.put(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);

gr.setRenderingHints(rh);


/* 描画色 */
gr.setColor(new Color(0xbb, 0xdd, 0xff));
/* 線のスタイルを設定 */
float dashPattern[] = {4.0f};
BasicStroke bs = new BasicStroke(2.0f,
BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND, 2.0f,
dashPattern, 0.0f);
gr.setStroke(bs);

/* 点線角丸四角を描画 */
RoundRectangle2D rr = new RoundRectangle2D.Double(
0.0, 0.0, 99.0, 99.0, 40.0, 40.0);
gr.draw(rr);
gr.dispose();
ImageIO.write(img, "jpg", new File("sample745a.jpg"));
}
}


出力画像(sample745a.jpg)

Sunday, January 04, 2009

groovyで画像を2値化する

groovyで画像を2値化するには、以下のコードを実行します。


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample855a.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 {
threshold(lowerThreshold: 128,
upperThreshold: 127,
white: color("orange"),
black: color("white"))
}
}
}


元画像(sf.jpg)


出力画像(sample855a.png)
groovyで2値化した画像

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

関連項目
groovyで画像に放射ブラーをかける
groovyで画像に水面の波紋のような効果をかける
groovyで画像をシャープにする

groovyでCubicCurveを描画する

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


import groovy.swing.j2d.*

def gr = new GraphicsRenderer()
gr.renderToFile("sample791a.png", 200, 200){
antialias("on")
cubicCurve( x1: 40, y1:200, ctrlx1:0, ctrly1:50,
ctrlx2:200, ctrly2: 0, x2:160, y2:200,
borderColor: color("#aaccff"),
borderWidth: 3
)
}


出力画像(sample791a.png)


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

関連項目
groovyで円弧を描画する
SVGRendererでCubicCurveを描画する (SVGRendererによる同様の処理)

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>sample734(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 手でちぎったように画像を切り取る */
$im = new Imagick('sf.jpg');

$px = 5;
$py = 5;
$im2 = new Imagick();
$im2->newImage($im->getImageWidth(), $im->getImageHeight(), "none");
$im2->setImageMatte(true);
$idraw = new ImagickDraw();
$idraw->setFillColor('white');
$idraw->rectangle($px, $py, $im->getImageWidth()-$px, $im->getImageHeight()-$py);
$im2->drawImage($idraw);
$im2->spreadImage(6);
$im2->medianFilterImage(3);
$im2->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0, Imagick::CHANNEL_ALL);

$im2->writeImage('sample734a.png');

$idraw->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample734a.png" />

</body>
</html>

元画像(sf.jpg)


出力画像(sample734a.png)


関連項目
ImageMagickで手で切り取ったように不規則に画像を切り取る (convertコマンドでの同様の処理)