Saturday, December 13, 2008

ImageMagickで画像をグレースケールの立体的な角丸四角に変換する

ImageMagickで画像をグレースケールの立体的な角丸四角に変換するには、以下のコマンドを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.4-Q16

rem 画像をグレースケールの立体的な角丸四角に変換する
%im%\convert.exe -size 200x200 xc:none -fill white -draw "roundrectangle 10,10,190,190,10,10" -matte -channel rgba sf.jpg -compose src_in -composite -modulate 160 -colorspace gray ( -size 200x200 xc:none -fill white -draw "roundrectangle 10,10,190,190,10,10" -shade 135x23 -blur 0x2 -normalize -matte -channel rgba ) -swap 0,1 -compose overlay -composite sample711a.png

元画像(sf.jpg)


出力画像(sample711a.png)


関連項目
ImageMagickで、縁を明るくして角丸四角に切り取る
ImageMagickで画像を角丸四角に切り取って文字入れをする
ImageMagickとPHPで画像をグレースケールの立体的な角丸四角に変換する (Imagickによる同様の処理)

GMICを使用して画像を重ね合わせる

GMICを使用して画像を重ね合わせるには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set gmic=C:\share\gmic-0.8

rem 50,50の位置で重ね合わせ
%gmic%\gmic.exe sf.jpg sample3b.jpg -draw[0] [1],50,50 -remove[1] -o sample709a.png

rem 10,90,0の位置で透明度0.5で重ね合わせ
%gmic%\gmic.exe sf.jpg sample3b.jpg -draw[0] [1],10,90,0,0.5 -remove[1] -o sample709b.png

元画像1(sf.jpg)


元画像2(sample3b.jpg)


出力画像1(sample709a.png)


出力画像2(sample709b.png)


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

Friday, December 12, 2008

RMagickで画像上に描画した文字列以外の部分をグレースケールにする

RMagickで画像上に描画した文字列以外の部分をグレースケールにするには、以下のコードを実行します。

require 'RMagick'
include Magick

images = ImageList.new("sf.jpg")
img2 = Image.new(images[0].columns, images[0].rows){
self.background_color = "none"
}

dr = Draw.new
# 使用フォント
dr.font = "Tahoma-Bold"
# ポイントサイズ
dr.pointsize = 28
# 描画色
dr.fill = "white"
# gravity
dr.gravity = CenterGravity
dr.annotate(img2, 0, 0, 0, -40, "San Francisco")
# 文字で切り取り
img3 = img2.composite(images[0], 0, 0, SrcInCompositeOp)

# グレースケール画像
images2 = ImageList.new("sf.jpg")
images2.colorspace = ColorspaceType::GRAYColorspace

# グレースケール画像と文字で切り取ったカラー画像を重ね合わせ
img4 = images2.composite(img3, CenterGravity, 0, 0, OverCompositeOp);
img4.write("sample708a.png")

exit

元画像(sf.jpg)


出力画像(sample708a.png)


関連項目
RMagickで日本語文字列を描画する
RMagickで半透明影つきの文字列を描画する

Wednesday, December 10, 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>sample707(ImageMagick6.4.4)</title>
</head>
<body>
<?php
/* 画像に半透明ガラス枠をつける */
$dx = 15;
$dy = 15;

$im = new Imagick("sf.jpg");
$ox = $im->getImageWidth();
$oy = $im->getImageHeight();
/* 画像をリサイズ */
$im->resizeImage(
$ox+$dx*2, $oy+$dy*2,
imagick::FILTER_MITCHELL, 1, false);
/* ちょっと暗めに */
$im2 = $im->fxImage("p*0.8");
/* 黒色の枠をつける */
$im2->borderImage('#000000', $dx, $dy);

$idraw = new ImagickDraw();
/* 塗りつぶし色設定 */
$idraw->setFillColor('#ffffff');
$idraw->rectangle($dx*2, $dy*2,
$ox+$dx*2-1, $oy+$dy*2-1);
$im2->drawImage($idraw);
/* ぼかす */
$im2->blurImage(0,2);
/* 切り取り */
$im2->cropImage($ox+$dx*2, $oy+$dy*2, $dx, $dy);
/* 重ね合わせ */
$im3 = new Imagick("sf.jpg");
$im2->compositeImage($im3,
Imagick::COMPOSITE_DEFAULT, $dx, $dy);
$im2->writeImage('sample707a.png');

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

</body>
</html>

元画像(sf.jpg)


出力画像(sample707a.png)


関連項目
ImageMagickで画像に半透明ガラス枠をつける (Convertコマンドによる同様の処理)

Tuesday, December 09, 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 Java2DTest61
{
public static void main(String args[])
throws Exception
{
/* 画像の端を暗くぼかす */
BufferedImage img = ImageIO.read(new File("sf.jpg"));
BufferedImage img2 = new BufferedImage(
img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB
);
/* 端を空けて白で塗りつぶし */
Graphics2D gr1 = img2.createGraphics();
gr1.setColor(new Color(1F, 1F, 1F, 1F));
Rectangle2D rr = new Rectangle2D.Double(
2.0, 2.0, img.getWidth()-4, img.getHeight()-4);
gr1.fill(rr);
gr1.dispose();

/* ぼかし */
GaussianFilter gf = new GaussianFilter(10);
BufferedImage img3 = gf.filter(img2, null);

/* 切り取り */
Graphics2D gr2 = img3.createGraphics();
gr2.setComposite(AlphaComposite.SrcIn);
gr2.drawImage(img,0,0,null);
gr2.dispose();

/* 黒色背景画像を作成 */
BufferedImage img4 = new BufferedImage(
img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB
);
FillFilter ff2 = new FillFilter(0xff000000);
BufferedImage img5 = ff2.filter(img4, null);

/* 切り取った画像と合成 */
Graphics2D gr3 = img5.createGraphics();
gr3.drawImage(img3,0,0,null);
gr3.dispose();
ImageIO.write(img5, "jpg", new File("sample710a.jpg"));

}
}


元画像(sf.jpg)


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

Monday, December 08, 2008

librsvgを使用して白い影を描画する

librsvgを使用して白い影を描画するには、以下のsvgファイルを処理します。

whiteshadow.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="gbf" filterUnits="userSpaceOnUse" x="0" y="0" width="220" height="50" >
<feColorMatrix in="SourceAlpha" type="matrix"
values="-1,0,0,0,1 0,-1,0,0,1 0,0,-1,0,1 0,0,0,1,0" result="ra"/>
<feGaussianBlur in="ra" stdDeviation="4" result="shadow"/>
<feOffset in="shadow" dx="4" dy="4" result="shadow2"/>
<feComposite in="SourceGraphic" in2="shadow2" operator="over"/>
</filter>
</defs>

<image x="0" y="0" width="200" height="200"
xlink:href="sf.jpg" >
<title>sf.jpg</title>
</image>
<text x="10" y="30" font-family="Arial" font-size="25"
style="fill:#888080; stroke:#888080;" filter="url(#gbf)">San Francisco
</text>
</svg>

コマンド
rsvg-convert whiteshadow.svg -f png -o sample706.png

元画像(sf.jpg)


出力画像(sample706.png)

○関連情報
・libsvgに関する他の記事はこちらを参照してください。

Sunday, December 07, 2008

ImageMagickで画像を交差する線のスケッチ調に変換する

ImageMagickで画像を交差する線のスケッチ調に変換するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.4-Q16
%im%\convert.exe sf.jpg -modulate 120 -sketch 0x10+45 ( sf.jpg -modulate 120 -sketch 0x10+135 -matte -channel a -fx 0.5 ) -composite sample749a.png

上では少し画像を明るくした後、45度と135度の角度でスケッチ画像を生成して、
135度の画像を半透明にして重ね合わせています。

元画像(sf.jpg)


出力画像(sample749a.png)


関連項目
ImageMagickで、画像を端がちぎられたようなスケッチ調の画像に変換する

Saturday, December 06, 2008

librsvgを使用して画像の彩度をおとす

librsvgを使用して画像の彩度をおとすには、以下のsvgファイルを処理します。

saturate.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="sf" filterUnits="userSpaceOnUse" x="0" y="0" width="200" height="200" >
<feColorMatrix in="SourceGraphic" type="saturate" values="0.5" />
</filter>
</defs>

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

コマンド
rsvg-convert saturate.svg -f png -o sample705.png

元画像(sf.jpg)


出力画像(sample705.png)


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

Friday, December 05, 2008

ImageMagickで放射グラデーションを描画する

ImageMagickで放射グラデーションを描画するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.4.4-Q16
%im%\convert.exe -size 200x200 radial-gradient:#bbddff-#ffffff sample704a.png

出力画像(sample704a.png)


関連項目
ImageMagickとPHPで放射グラデーションを描画する (Imagickでの同様の処理)
RMagickで放射グラデーションを描画する (RubyとRmagickでの同様の処理)

Thursday, December 04, 2008

librsvgを使用して画像をセピア調に変換する

librsvgを使用して画像をセピア調に変換するには、以下のsvgファイルを処理します。

sepia.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="sf" filterUnits="userSpaceOnUse" x="0" y="0" width="200" height="200" >
<feColorMatrix in="SourceGraphic" type="matrix" result="grayscale"
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" />
<!-- 0xd0/0xff=0.82 0xa0/0xff=0.63 0x50/0xff=0.31 -->
<feColorMatrix in="grayscale" type="matrix"
values="0.82 0.00 0.00 0.00 0.00
0.00 0.63 0.00 0.00 0.00
0.00 0.00 0.31 0.00 0.00
0.00 0.00 0.00 1.00 0.00" />
</filter>
</defs>

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


コマンド
rsvg-convert sepia.svg -f png -o sample702.png

元画像(sf.jpg)


出力画像(sample702.png)


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

Wednesday, December 03, 2008

Python Imaging Libraryで画像をセピア調に変換する

Python Imaging Libraryで画像をセピア調に変換するには、以下のコードを実行します。


# coding=UTF-8
import Image
import ImageOps

# 画像をセピア調に変換する
img1 = Image.open("sf.jpg")
#img2 = ImageOps.grayscale(img1)
for ly in range(img1.size[1]):
for lx in range(img1.size[0]):
pv = img1.getpixel((lx, ly))
pv2 = (pv[0]+pv[1]+pv[2])/3
pr = int(pv2 *0xd0/0xff)
pg = int(pv2 *0xa0/0xff)
pb = int(pv2 *0x50/0xff)
img1.putpixel((lx,ly), (pr,pg,pb))
img1.save("sample701a.png")

元画像(sf.jpg)


出力画像(sample701a.png)


関連情報
Python Imaging Libraryまとめ

Tuesday, December 02, 2008

librsvgを使用して、画像に半透明ぼかしの文字列を描画する

librsvgを使用して、画像に半透明ぼかしの文字列を描画するには、以下のsvgファイルを処理します。

blurred-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"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="200" height="200">

<defs>
<g id="mes">
<text x="3%" y="65%" font-family="Arial" font-size="30"
fill="#ffffff" fill-opacity="0.8" filter="url(#gbf)">San Francisco
</text>
</g>
<filter id="btf" filterUnits="userSpaceOnUse" x="0" y="0" width="200" height="200" >
<feImage xlink:href="#mes" result="mes"/>
<feGaussianBlur in="mes" stdDeviation="1.5" result="bt"/>
<feComposite in="bt" in2="SourceGraphic" operator="over" />
</filter>
</defs>

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

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

元画像(sf.jpg)


出力画像(sample700.png)

○関連情報
・libsvgに関する他の記事はこちらを参照してください。

Monday, December 01, 2008

librsvgを使用して画像をシャープにする

librsvgを使用して画像をシャープにするには、以下のsvgファイルを処理します。

sharpen.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="sf">
<feConvolveMatrix in="SourceGraphic" order="3"
kernelMatrix="0 -0.2 0 -0.2 1.8 -0.2 0 -0.2 0" />
</filter>
</defs>

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

コマンド
rsvg-convert sharpen.svg -f png -o sample699.png

元画像(sf.jpg)


出力画像(sample699.png)

○関連情報
・libsvgに関する他の記事はこちらを参照してください。

Sunday, November 30, 2008

librsvgを使用して画像の端を暗くする

librsvgを使用して画像の端を暗くするには、以下のSVGファイルを処理します。

edge-darkening.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>
<!-- 端が透明なマスク -->
<g id="maskimage"
x="0" y="0" width="200" height="200">
<rect x="0" y="0" width="200" height="200" fill="#ffffff"/>
</g>
<!-- 黒背景 -->
<g id="bg">
<rect x="0" y="0" width="200" height="200" fill="#000000" />
</g>
<filter id="edf">
<!-- マスクイメージをぼかす -->
<feImage xlink:href="#maskimage" result="maskimage"/>
<feGaussianBlur in="maskimage" stdDeviation="8" result="blurred"/>
<!-- マスクイメージを使用して切り取り -->
<feComposite in="SourceGraphic" in2="blurred" operator="in" result="iwt"/>
<!-- 半透明画像と黒背景を重ね合わせ -->
<feImage xlink:href="#bg" result="bg"/>
<feComposite in="iwt" in2="bg" operator="over" />
</filter>
</defs>

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

コマンド
rsvg-convert edge-darkening.svg -f png -o sample698.png

元画像(sf.jpg)


出力画像(sample698.png)


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

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で画像をグレースケールに変換する
・libsvgに関する他の記事はこちらを参照してください。

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で、画像の緑っぽい所以外は白黒にする