Saturday, October 18, 2008

RMagickで画像の四隅を切り取る

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

require 'RMagick'
include Magick

# 四隅切り取りサイズ
px = 20
py = 20
# 画像読み込み
images = ImageList.new("sf2.jpg")
# マスク作成
mask = Image.new(images[0].columns, images[0].rows){
self.background_color = "none"
}
idr = Draw.new
idr.polygon(px, 0, images[0].columns-1-px, 0,
images[0].columns-1, py, images[0].columns-1, images[0].rows-1-px,
images[0].columns-1-px, images[0].rows-1, px, images[0].rows-1,
0, images[0].rows-1-py, 0, py)
idr.draw(mask);

# マスクを利用して切り取り
img2 = mask.composite(images[0], 0, 0, SrcInCompositeOp)

# 背景用画像
bg = Image.new(images[0].columns, images[0].rows){
self.background_color = "white"
}
img3 = bg.composite(img2, CenterGravity, 0, 0, OverCompositeOp);
img3.write("sample655a.png")

exit

元画像(sf2.jpg)


出力画像(sample655a.png)


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

関連項目
RMagickで画像を角丸四角に切り取る
ImageMagickで画像の四隅を切り取る (Convertコマンドでの同様の処理)

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"
width="300" height="300">
<defs>
<filter id="gbf">
<feGaussianBlur in="SourceGraphic" stdDeviation="5" />
</filter>
</defs>

<rect x="50" y="50" width="200" height="200"
style="fill:#bbddff; filter:url(#gbf)"/>
</svg>

コマンド
rsvg-convert filter-gaussian-blur.svg -f png -o sample682.png

出力画像(sample682.png)




関連項目
librsvgをwindowsで使用してSVGからPNG画像を生成する (librsvgをWindowsで使用する方法)
librsvgで四角を描画する

GMICを使用して画像を白黒化する

GMICを使用して画像を白黒化するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set gmic=C:\share\gmic-0.8
%gmic%\gmic.exe sf.jpg -ditheredbw -o sample594a.png

元画像(sf.jpg)


出力画像(sample594a.png)


関連項目
G'MICのホームページ

Friday, October 17, 2008

GMICを使用して、画像を白黒ドット画像に変換する

GMICを使用して、画像を白黒ドット画像に変換するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set gmic=C:\share\gmic-0.8
%gmic%\gmic.exe sf.jpg -dotsbw -o sample593a.png

元画像(sf.jpg)


出力画像(sample593a.png)


関連項目
G'MICのホームページ

Python Imaging Libraryを使用して、エッジ抽出を行う

Python Imaging Libraryを使用してエッジ抽出を行うには、以下のコードを実行します。

# coding=UTF-8
import Image
import ImageFilter
# 画像の輪郭抽出する
img1 = Image.open("sf.jpg")
img2 = img1.filter(ImageFilter.FIND_EDGES)
img2.save("sample622a.jpg")

元画像(sf.jpg)


出力画像(sample622a.jpg)


関連情報
Python Imaging Libraryまとめ

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="300" height="300">
<image x="50" y="50" width="200px" height="200px"
xlink:href="./sf.jpg">
<title>sf.jpg</title>
</image>
</svg>

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

元画像(sf.jpg)


出力画像(sample681.png)

関連項目
librsvgをwindowsで使用してSVGからPNG画像を生成する (librsvgをWindowsで使用する方法)

Thursday, October 16, 2008

GMICを使用して画像に放射ブラーをかける

GMICを使用して画像に放射ブラーをかけるには、以下のコマンドを実行します。

rem 環境によって変えてね
set gmic=C:\share\gmic-0.8
%gmic%\gmic.exe sf.jpg -radialblur -o sample592a.png

元画像(sf.jpg)


出力画像(sample592a.png)

関連項目
G'MICのホームページ

Java2DとJava Image Filters(pixels)を使用して画像をタイル状に配置する

Java2DとJava Image Filters(pixels)を使用して画像をタイル状に配置するには、以下のコードを実行します。

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

public class Java2DTest58
{
public static void main(String args[])
throws Exception
{
/* 画像をタイル状に配置する */
BufferedImage img = ImageIO.read(new File("flower1.png"));
BufferedImage img2 = new BufferedImage(
200, 150, BufferedImage.TYPE_INT_RGB
);
TileImageFilter tif = new TileImageFilter(img2.getWidth(), img2.getHeight());

img2 = tif.filter(img, img2);
ImageIO.write(img2, "jpg", new File("sample654a.jpg"));
}
}

元画像(flower1.png)


出力画像(sample654a.jpg)

関連項目
Jerry Huxtableさんのホームページ
Java Image Filtersのページ
java.netでのプロジェクトページ

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"
width="200" height="200">
<defs>
<radialGradient id="rg" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
<stop offset="0%" style="stop-color: #bbddff" />
<stop offset="100%" style="stop-color: #ffffff" />
</radialGradient>
</defs>

<rect x="50" y="50" width="100" height="100"
style="fill:url(#rg)"/>
</svg>

コマンド
rsvg-convert radial-gradient.svg -f png -o sample680.png

出力画像(sample680.png)


関連項目
librsvgをwindowsで使用してSVGからPNG画像を生成する (librsvgをWindowsで使用する方法)

Wednesday, October 15, 2008

ImageMagickとPHPで画像をビデオ風にする - その2

Imagickで画像をビデオ風にするには、以下のコードを実行します。
以下のコードではfxImageを使用しないで偶数ラインを暗くしています。

<!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>sample589(ImageMagick6.4.2)</title>
</head>
<body>
<?php
/* 画像をビデオ風に変換する */

$im = new Imagick("sf.jpg");
$it = $im->getPixelIterator();
foreach($it as $py => $line){
if( $py%2 == 0 ){
foreach($line as $px => $pixel){
$pr = $pixel->getColorValue(Imagick::COLOR_RED);
$pg = $pixel->getColorValue(Imagick::COLOR_GREEN);
$pb = $pixel->getColorValue(Imagick::COLOR_BLUE);
$pixel->setColorValue(Imagick::COLOR_RED, $pr/2);
$pixel->setColorValue(Imagick::COLOR_GREEN, $pg/2);
$pixel->setColorValue(Imagick::COLOR_BLUE, $pb/2);
}
}
$it->syncIterator();
}
$im->writeImage('sample589a.jpg');

$im->destroy();
?>
<img src="sample589a.jpg" />

</body>
</html>


元画像(sf.jpg)


出力画像(sample589a.jpg)


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

関連項目
ImageMagickとPHPで画像をビデオ風に変換する

rsvgでグラデーションを描画する

rsvgでグラデーションを描画するには、以下の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"
width="200" height="200">
<defs>
<linearGradient id="lg" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color: #ffffff" />
<stop offset="100%" style="stop-color: #bbddff" />
</linearGradient>
</defs>

<rect x="50" y="50" width="150" height="150"
style="fill:url(#lg)"/>
</svg>
コマンド
rsvg-convert linear-gradient.svg -f png -o sample679.png

出力画像(sample679.png)


関連項目
librsvgをwindowsで使用してSVGからPNG画像を生成する (librsvgをWindowsで使用する方法)

Tuesday, October 14, 2008

Java2DとJava Image Filters(pixels)を使用して画像をライトで照らしたようなイフェクトをかける

Java2DとJava Image Filters(pixels)を使用して画像をライトで照らしたようなイフェクトをかけるには、以下のコードを実行します。
以下のコードでは、青色と赤色のライトの位置をずらして、画像を照らしています。

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

public class Java2DTest57
{
public static void main(String args[])
throws Exception
{
/* 画像をライトで照らしたような画像の生成 */
BufferedImage img = ImageIO.read(new File("sf2.jpg"));
LightFilter lf = new LightFilter();
LightFilter.Light lt1 = new LightFilter.Light();
/* 方位 */
lt1.setAzimuth(90f/180f*ImageMath.PI);
/* 高さ */
lt1.setElevation(0.8f);
/* 強さ */
lt1.setIntensity(0.5f);
/* 位置X */
lt1.setCentreX(0.2f);
/* 位置Y */
lt1.setCentreY(0.5f);
/* ライトの色 */
lt1.setColor(0xff0000ff);
lf.addLight(lt1);

LightFilter.Light lt2 = new LightFilter.Light();
/* 方位 */
lt2.setAzimuth(90f/180f*ImageMath.PI);
/* 高さ */
lt2.setElevation(0.8f);
/* 強さ */
lt2.setIntensity(0.5f);
/* 位置X */
lt2.setCentreX(0.8f);
/* 位置Y */
lt2.setCentreY(0.5f);
/* ライトの色 */
lt2.setColor(0xffff0000);
lf.addLight(lt2);

BufferedImage img2 = lf.filter(img, null);
ImageIO.write(img2, "jpg", new File("sample588a.jpg"));
}
}

元画像(sf2.jpg)


出力画像(sample588a.jpg)


関連項目
Jerry Huxtableさんのホームページ
http://www.jhlabs.com/index.html
Java Image Filtersのページ
http://www.jhlabs.com/ip/filters/
java.netでのプロジェクトページ
https://pixels.dev.java.net/

Python Imaging Libraryを使用して画像をエンボス処理する

PILを使用して画像をエンボス処理するには、以下のコードを実行します。

# coding=UTF-8
import Image
import ImageFilter
# 画像をエンボス処理する
img1 = Image.open("sf.jpg")
img2 = img1.filter(ImageFilter.EMBOSS)
img2.save("sample621a.jpg")

元画像(sf.jpg)


出力画像(sample621a.jpg)


関連情報
Python Imaging Libraryまとめ

librsvgで文字列を描画する

librsvgで文字列を描画するには、以下のSVGファイルを処理します。

text.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"
width="200" height="200">

<text x="20" y="100" font-family="MS UI Gothic" font-size="50"
style="fill:#bbddff; stroke:#000000">さんぷる
</text>
</svg>

コマンド
rsvg-convert text.svg -f png -o sample678.png

出力画像(sample678.png)


関連項目
librsvgをwindowsで使用してSVGからPNG画像を生成する (librsvgをWindowsで使用する方法)

Monday, October 13, 2008

Java2DとJava Image Filters(pixels)を使用して万華鏡のような画像を生成する

Java2DとJava Image Filters(pixels)を使用して万華鏡のような画像を生成するには、以下のコードを実行します。

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

public class Java2DTest56
{
public static void main(String args[])
throws Exception
{
/* 万華鏡のような画像の生成 */
BufferedImage img = ImageIO.read(new File("sf2.jpg"));
KaleidoscopeFilter kf = new KaleidoscopeFilter();
/* 面数 */
kf.setSides(6);
/* 角度1 */
kf.setAngle(20f/180f*ImageMath.PI);
/* 角度2 */
kf.setAngle2(50f/180f*ImageMath.PI);
/* 中心X */
kf.setCentreX(0.5f);
/* 中心Y */
kf.setCentreY(0.5f);
/* 半径 */
kf.setRadius(100);
BufferedImage img2 = kf.filter(img, null);
ImageIO.write(img2, "jpg", new File("sample587a.jpg"));
}
}

元画像(sf2.jpg)


出力画像(sample587a.jpg)


関連項目
Jerry Huxtableさんのホームページ
http://www.jhlabs.com/index.html
Java Image Filtersのページ
http://www.jhlabs.com/ip/filters/
java.netでのプロジェクトページ
https://pixels.dev.java.net/

librsvgでパスを描画する

librsvgでパスを描画するには、以下のsvgファイルを処理します。

path.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"
width="200" height="200">
<path d="M 150,0 L 10,10 A 100,100 0 0,1 80,80 Z"
style="fill:#bbddff; stroke-width:1; stroke:#000000 "
/>
</svg>
コマンド
rsvg-convert path.svg -f png -o sample677.png

出力画像(sample677.png)


関連項目
librsvgをwindowsで使用してSVGからPNG画像を生成する (librsvgをWindowsで使用する方法)

Sunday, October 12, 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>sample653(ImageMagick6.4.2)</title>
</head>
<body>
<?php
/* 画像の端を半透明グラデーションにする */
$im = new Imagick("sf2.jpg");
$im->setImageMatte(true);

$it = $im->getPixelIterator();
foreach($it as $py => $line){
foreach($line as $px => $pixel){
$pixel->setColorValue(Imagick::COLOR_ALPHA,
((1.0-pow(2*$px/(float)$im->getImageWidth()-1.0, 4))*
(1.0-pow(2*$py/(float)$im->getImageHeight()-1.0, 4)))
);
}
$it->syncIterator();
}
$im->writeImage('sample653a.png');
/* 白背景と重ね合わせてjpegで保存 */
$im2 = new Imagick();
$im2->newImage($im->getImageWidth(), $im->getImageHeight(), "white");
$im2->compositeImage($im, Imagick::COMPOSITE_DEFAULT, 0, 0);
$im2->writeImage('sample653b.jpg');

$im2->destroy();
$im->destroy();
?>
<img src="sample653a.png" />
<img src="sample653b.jpg" />

</body>
</html>

元画像(sf2.jpg)


出力画像(sample653a.png):半透明PNG


出力画像(sample653b.jpg)


関連項目
ImageMagickとPHPで半透明の円形に切り取って他の画像と重ね合わせる
ImageMagickで画像に半透明グラデーションをかける

ImageMagickで画像のレベルを変更する

ImageMagickで画像のレベルを変更するには、以下のコードを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.3-Q16
rem 画像のレベルを明るく調整
%im%\convert.exe sf.jpg -level 0,80%% sample645a.png
rem 画像のレベルを暗く調整
%im%\convert.exe sf.jpg -level 20,100%% sample645b.png

元画像(sf.jpg)


出力画像(sample645a.png)


出力画像(sample645b.png)

Java2DとJava Image Filters(pixels)を使用して画像をリサイズする

Java2DとJava Image Filters(pixels)を使用して画像をリサイズするには、以下のコードを実行します。

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

public class Java2DTest55
{
public static void main(String args[])
throws Exception
{
/* 画像のリサイズ */
BufferedImage img = ImageIO.read(new File("sf.jpg"));
BufferedImage img2 = new BufferedImage(
200, 100, BufferedImage.TYPE_INT_RGB
);
ScaleFilter sf = new ScaleFilter(200, 100);
img2 = sf.filter(img, img2);
ImageIO.write(img2, "jpg", new File("sample586a.jpg"));
}
}

元画像(sf.jpg)


出力画像(sample586a.jpg)


関連項目
Jerry Huxtableさんのホームページ
http://www.jhlabs.com/index.html
Java Image Filtersのページ
http://www.jhlabs.com/ip/filters/
java.netでのプロジェクトページ
https://pixels.dev.java.net/