Index > Jythonで画像処理 画像のリサイズ
Sat, October 14, 2006

Jythonで画像処理 画像のリサイズ

Javaの持つ画像処理をJythonから利用してみます。 横幅を指定して画像をリサイズできるようにしてみます。

コード resize.py

import sys

import java.lang as lang
import java.awt as awt
import java.awt.image as awtimage
import javax.imageio as imageio
import javax.swing as swing


width=0
try:
    width=lang.Integer.parseInt(sys.argv[1])

except:
    width=100


# read-image
bimg=imageio.ImageIO.read(lang.System.in)
img=bimg.getScaledInstance(width,-1,awt.Image.SCALE_SMOOTH) #awt.Image.SCALE_DEFAULT

# calc height
icon=swing.ImageIcon(img)
height=icon.getIconHeight()

# make output-image
type=awtimage.BufferedImage.TYPE_4BYTE_ABGR
bimg2=awtimage.BufferedImage(width,height,type)
g2=bimg2.getGraphics()
g2.drawImage(img,0,0,None)
g2.dispose()

imageio.ImageIO.write(bimg2,"PNG",lang.System.out)

実行

このコードを resize.py に保存して、以下のコマンドを実行。 (リサイズ後の横幅を80に指定)

$ jython resize.py 80 < foo.png > foo_resized.png

補足

リサイズ対象となる画像がPNG形式以外の場合でも、java.imageio.ImageIO で対応している形式なら処理できます。 このコードでは、出力がPNGに固定されていますが、

imageio.ImageIO.write(bimg2,"PNG",lang.System.out)

の行を書き換えることで、他の形式に出力可能です。

例) 幅150px から 20% ずつ小さい画像を順に6枚生成

オリジナル画像

http://www.flickr.com/photos/exothermic/ / CC BY-SA 2.0
 Twitter
follow me on Twitter
 Categories