Saturday, November 29, 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 Java2DTest60
{
public static void main(String args[])
throws Exception
{
/* プラズマ画像を生成する */
BufferedImage img = new BufferedImage(
200, 200, BufferedImage.TYPE_INT_RGB
);
PlasmaFilter pf = new PlasmaFilter();
/* 乱れを設定する(0-10) */
pf.setTurbulence(1.1f);
/* seed設定 */
pf.setSeed(318);

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


出力画像(sample660a.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ファイルを処理します。

<?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">

<defs>
<!-- 半透明グラデーション -->
<linearGradient id="tg" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="1"/>
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
</linearGradient>
<!-- 半透明グラデーション画像 -->
<g id="gltr">
<rect x="0" y="0" width="200" height="200" fill="url(#tg)" />
</g>
<filter id="mgf" >
<!-- 白黒画像 -->
<feColorMatrix in="SourceGraphic" type="matrix"
values="0.33 0.33 0.33 0.00 0.00
0.33 0.33 0.33 0.00 0.00
0.33 0.33 0.33 0.00 0.00
0.00 0.00 0.00 1.00 0.00" result="mono"/>
<feImage xlink:href="#gltr" result="gltr"/>
<!-- 半透明グラデーション画像を使用して切り取り -->
<feComposite in="SourceGraphic" in2="gltr" operator="in" result="grad"/>
<!-- 白黒画像と半透明グラデーション画像を重ね合わせ -->
<feComposite in="grad" in2="mono" operator="over"/>
</filter>
</defs>

<image x="0" y="0" width="200" height="200"
xlink:href="sf.jpg" filter="url(#mgf)">
<title>sf.jpg</title>
</image>
</svg>

コマンド
rsvg-convert monotone-gradient.svg -f png -o sample697.png

元画像(sf.jpg)


出力画像(sample697.png)


関連項目
librsvgで画像をグレースケールに変換する

Friday, November 28, 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 Java2DTest59
{
public static void main(String args[])
throws Exception
{
/* 画像をシャープにする */
BufferedImage img = ImageIO.read(new File("sf.jpg"));
SharpenFilter sf = new SharpenFilter();

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

元画像(sf.jpg)


出力画像(sample659a.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/

Thursday, November 27, 2008

Python Imaging Libraryで画像を円形にぼかす

Python Imaging Libraryで画像を円形にぼかすには、以下のコードを実行します。

# coding=UTF-8
import Image
import ImageDraw
import math

# 画像のぼけた円で切り取る
#xx=i/w-.5; yy=j/h-.5; rr=xx*xx+yy*yy; 1-rr*4
img1 = Image.open("sf.jpg")
img2 = Image.new("L", img1.size, 1)
for ly in range(img2.size[1]):
for lx in range(img2.size[0]):
img2.putpixel((lx,ly),
int((1-(pow(lx/float(img2.size[0])-0.5, 2)+
pow(ly/float(img2.size[1])-0.5, 2))*4)*255))
img1.putalpha(img2)
# pngで保存
img1.save("sample652a.png")

# 白背景と合成してjpegで保存
img3 = Image.new("RGB", img1.size, "#ffffff")
img3.paste(img1, mask=img1)
img3.save("sample652b.jpg")

元画像(sf.jpg)


出力画像1(sample652a.png)



出力画像2(sample652b.jpg)



関連項目
Python Imaging Libraryまとめ
Python Imaging Libraryで画像の端を半透明にぼかす
Python Imaging Libraryで画像をぼかした円で切り取る

Wednesday, November 26, 2008

Python Imaging Libraryで画像の端を半透明にぼかす

Python Imaging Libraryで画像の端を半透明にぼかすには、以下のコードを実行します。

# coding=UTF-8
import Image
import ImageDraw
import math

# 画像の端を半透明にしてぼかし
img1 = Image.open("sf.jpg")
img2 = Image.new("L", img1.size, 1)
for ly in range(img2.size[1]):
for lx in range(img2.size[0]):
img2.putpixel((lx,ly),
int(((1-pow(2*lx/float(img2.size[0])-1.0, 4))*
(1.0-pow(2*ly/float(img2.size[1])-1.0, 4)))*255))
img1.putalpha(img2)
# pngで保存
img1.save("sample651a.png")

# 白背景と合成してjpegで保存
img3 = Image.new("RGB", img1.size, "#ffffff")
img3.paste(img1, mask=img1)
img3.save("sample651b.jpg")

元画像(sf.jpg)


出力画像1(sample651a.png)


出力画像2(sample651b.png)


関連項目
Python Imaging Libraryまとめ
Python Imaging Libraryで画像の端を半透明にぼかす
Python Imaging Libraryで画像をぼかした円で切り取る

Monday, November 24, 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>sample703(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 画像の指定された点を中心として徐々に白黒化する */
$cx = 150;
$cy = 100;
$cr = 150;
$im = new Imagick("sf.jpg");
$im->setImageMatte(true);

/* 指定された点から徐々に透明になるようにalphaを設定 */
$it = $im->getPixelIterator();
foreach($it as $py => $line){
foreach($line as $px => $pixel){
$pa = 1-sqrt(pow($cx-$px,2)+pow($cy-$py,2))/$cr;
$pa = $pa<0?0:$pa;
$pixel->setColorValue(Imagick::COLOR_ALPHA, $pa);
}
$it->syncIterator();
}
/* グレースケール画像と重ね合わせ */
$im2 = new Imagick("sf.jpg");
$it2 = $im2->getPixelIterator();
foreach($it2 as $py => $line){
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+$pg+$pb)/3);
$pixel->setColorValue(Imagick::COLOR_GREEN, ($pr+$pg+$pb)/3);
$pixel->setColorValue(Imagick::COLOR_BLUE, ($pr+$pg+$pb)/3);
}
$it2->syncIterator();
}
$im2->compositeImage($im, Imagick::COMPOSITE_DEFAULT, 0, 0);
$im2->writeImage('sample703a.png');

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

</body>
</html>

元画像(sf.jpg)


出力画像(sample703a.png)


関連項目
ImageMagickとPHPで青っぽいところ以外を白黒にする
ImageMagickで、マスクした部分を白黒に変換する
ImageMagickとPHPで、画像の緑っぽい所以外は白黒にする

Python Imaging Libraryで画像をぼかした円で切り取る

PILで画像をぼかした円で切り取るには、以下のコードを実行します。

# coding=UTF-8
import Image
import ImageFilter
import ImageDraw

# 半透明円の切り取りをする
img1 = Image.open("sf.jpg")
img2 = Image.new("RGBA", img1.size, "#000000")
mask = Image.new("L", img1.size, 1)
draw = ImageDraw.Draw(mask)
draw.ellipse((10,10,img1.size[0]-11,img1.size[1]-11), fill="#ffffff")
del draw
mask = mask.filter(ImageFilter.BLUR)
img2.paste(img1, (0,0))
img2.putalpha(mask)
# PNGで保存
img2.save("sample650a.png")
# 白背景と合成してjpegで保存
img3 = Image.new("RGB", img1.size, "#ffffff")
img3.paste(img2, mask=img2)
img3.save("sample650b.jpg")

元画像(sf.jpg)


出力画像1(sample650a.png)


出力画像2(sample650b.jpg)


関連情報
Python Imaging Libraryまとめ

librsvgで画像を反転させる

librsvgで画像を反転させるには、以下のsvgファイルを処理します。

invert.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">

<defs>
<filter id="if" >
<feColorMatrix in="SourceGraphic" type="matrix" values="-1,0,0,0,1 0,-1,0,0,1 0,0,-1,0,1 0,0,0,1,0"/>
</filter>
</defs>

<image x="0" y="0" width="200" height="200"
xlink:href="sf.jpg" filter="url(#if)">
<title>sf.jpg</title>
</image>
</svg>


コマンド
rsvg-convert invert.svg -f png -o sample696.png

元画像(sf.jpg)


出力画像(sample696.png)

Python Imaging Libraryで画像のシャープネスを上げる・下げる

PILで画像のシャープネスを上げたり下げたりするには、以下のコードを実行します。

# coding=UTF-8
import Image
import ImageEnhance

# 画像のシャープネスを下げる
img1 = Image.open("sf.jpg")
iec1 = ImageEnhance.Sharpness(img1)
img2 = iec1.enhance(0.5)
img2.save("sample649a.jpg",quality=80)
# 画像のシャープネスを上げる
iec2 = ImageEnhance.Sharpness(img1)
img3 = iec2.enhance(1.5)
img3.save("sample649b.jpg",quality=80)

元画像(sf.jpg)


出力画像1(sample649a.jpg)


出力画像2(sample649b.jpg)


関連情報
Python Imaging Libraryまとめ

Sunday, November 23, 2008

Python Imaging Libraryで画像のコントラストを上げる・下げる

PILで画像のコントラストを上げたり下げたりするには、以下のコードを実行します。

# coding=UTF-8
import Image
import ImageEnhance

# 画像のコントラストを上げる
img1 = Image.open("sf.jpg")
iec1 = ImageEnhance.Contrast(img1)
img2 = iec1.enhance(1.5)
img2.save("sample648a.jpg",quality=80)
# 画像のコントラストを下げる
iec2 = ImageEnhance.Contrast(img1)
img3 = iec2.enhance(0.5)
img3.save("sample648b.jpg",quality=80)

元画像(sf.jpg)


出力画像1(sample648a.jpg)


出力画像2(sample648b.jpg)


関連情報
Python Imaging Libraryまとめ