ともさんのHP >プロブラミング >自作JavaLibrary >画像を「拡大縮小回転反転文字の記入」して保存するクラス
画像を「拡大縮小回転反転文字の記入」して保存するクラス
tomojavalib.gazou.GazouConv
は複数の形式の画像ファイルを読み込み、拡大縮小、回転、文字の追記をして保存するJAVAClassです。
読み込みは setJpgOrPng(java.lang.String filename) で、読み込んだファイルをimgeに入れます。
ファイルの種類はpng形式かjpg形式です。
保存は
saveJpg(java.lang.String savefilename)
savePng(java.lang.String savefilename)
saveBmp(java.lang.String savefilename)
のいずれかで行います。それぞれjpg、png、bmp形式でファイルを作ります。BMP形式はJavaに標準で用意されていなかったので自分で作りました。
加工は、
単純な拡大縮小:scale(double hi)
縦横の大きさを指定して拡大縮小:scaleXY(int w, int h)
回転または反転(90°180°270°、縦横反転):kaiten(java.lang.String kakudo)
指定位置に文字を記入:writeString(java.awt.Color color, int stringsize, java.lang.String s, int x, int y)
の4つを用意してあります。
このクラスはデジタルカメラの写真整理で重宝しています。
写真に文字を挿入する
下を実行すると、文字をスタンプすることが出来ます。
GazouConv gv = new GazouConv();
gv.setJpgOrPng("z:\\work\\tmp\\09060901.jpg");
gv.writeString( java.awt.Color.green , 25, "柿が採れたど", 5, 230);
gv.saveJpg("z:\\work\\tmp\\09060902.jpg");
文字がにじむのはJpg形式の特徴なので、
gv.savePng("z:\\work\\tmp\\09060902.png"); と置き換えると、png形式で保存されて
こんなふうにくっきりします。特に赤い文字はJpg形式だとにじんでしまいます。
下は画像を2倍にする処理。大きくすると、当然ですが画面が荒れます。
GazouConv gv = new GazouConv();
gv.setJpgOrPng("z:\\work\\tmp\\09060901.jpg");
gv.scale( 2. );
gv.savePng("z:\\work\\tmp\\09060903.jpg");
今度は画像を400×100にする処理。細長くなりましたね。
GazouConv gv = new GazouConv();
gv.setJpgOrPng("z:\\work\\tmp\\09060901.jpg");
gv.scaleXY( 400, 100);
gv.savePng("z:\\work\\tmp\\09060904.jpg");
最後は90°回転させます。
GazouConv gv = new GazouConv();
gv.setJpgOrPng("z:\\work\\tmp\\09060901.jpg");
gv.kaiten("90");
gv.savePng("z:\\work\\tmp\\09060905.jpg");
もちろん、複数のメソッドを組み合わせることも出来ます。画像を読み込み、文字を記入し、サイズを半分にして、180°回転させると、下の画像ができあがります。
GazouConv gv = new GazouConv();
gv.setJpgOrPng("z:\\work\\tmp\\09060901.jpg");
gv.writeString( java.awt.Color.green , 25, "柿が採れたど", 5, 230);
gv.scale( .5 );
gv.kaiten("180");
gv.savePng("z:\\work\\tmp\\09060906.jpg");
画像を加工するJAVAクラスのソース
package tomojavalib.gazou;
import java.awt.Image;
/**
* 複数の形式の画像を読み込み、拡大縮小、回転、、保存するClass
* @author to.totomo.net
*
*/
public class GazouConv {
/**
* 画像の入れ物
*/
public java.awt.image.BufferedImage img = null;
/**
* このクラスの動作試験
* @param args
*/
public static void main(String[] args) {
GazouConv gv = new GazouConv();
gv.setJpgOrPng("z:\\work\\test.jpg");
gv.writeString( java.awt.Color.green , 25, "いらっしゃいませ", 5, 240);
gv.scale( 2. );
//gv.scaleXY( 400, 100);
gv.kaiten("180");
gv.saveJpg("z:\\work\\testa.jpg");
}
/**
* JPG形式のファイルを読み込みます。
* @param filename 読み込むファイルの名前
*/
public void setJpgOrPng( String filename )
{
java.io.File f = null;
/*ファイル読み込み*/
try {
f = new java.io.File( filename );
img = javax.imageio.ImageIO.read( f );
}catch (Exception e) { e.printStackTrace(); }
}
/**
* 画像をhi倍に拡大縮小します。
* @param hi 拡大、縮小比。
*/
public void scale( double hi )
{
java.awt.Image simg = img.getScaledInstance( (int)( hi * img.getWidth()) , (int)( hi * img.getHeight() ) , Image.SCALE_SMOOTH );
java.awt.image.BufferedImage ssimg = new java.awt.image.BufferedImage( (int)( hi * img.getWidth()) , (int)( hi * img.getHeight() ) ,img.getType() );
java.awt.Graphics g2 = ssimg.getGraphics() ;
g2.drawImage(simg, 0, 0, java.awt.Color.white, null) ;
img = ssimg;
}
/**
* 画像を指定の幅、高さ(ピクセル)拡大縮小します
* @param w 変更後の幅
* @param h 変更後の高さ
*/
public void scaleXY( int w , int h )
{
java.awt.Image simg = img.getScaledInstance( w , h , Image.SCALE_SMOOTH );
java.awt.image.BufferedImage ssimg = new java.awt.image.BufferedImage( w , h ,img.getType() );
java.awt.Graphics g = ssimg.getGraphics() ;
g.drawImage(simg, 0, 0, java.awt.Color.white, null) ;
img = ssimg;
}
/**
* 画像を回転または反転します。
* @param kakudo
*/
public void kaiten( String kakudo )
{
if(kakudo.equals("90")){
java.awt.image.BufferedImage kimg = new java.awt.image.BufferedImage( img.getHeight() , img.getWidth() ,img.getType() );
for(int iw =0; iw
} }
img = null; img = kimg;
}
if(kakudo.equals("270")){
java.awt.image.BufferedImage kimg = new java.awt.image.BufferedImage( img.getHeight() , img.getWidth() ,img.getType() );
for(int iw =0; iw
} }
img = null; img = kimg;
}
if(kakudo.equals("180")){
java.awt.image.BufferedImage kimg = new java.awt.image.BufferedImage( img.getWidth() ,img.getHeight() , img.getType() );
for(int iw =0; iw
} }
img = null; img = kimg;
}
if(kakudo.equals("WHanten")){
java.awt.image.BufferedImage kimg = new java.awt.image.BufferedImage( img.getWidth() ,img.getHeight() , img.getType() );
for(int iw =0; iw
} }
img = null; img = kimg;
}
if(kakudo.equals("HHanten")){
java.awt.image.BufferedImage kimg = new java.awt.image.BufferedImage( img.getWidth() ,img.getHeight() , img.getType() );
for(int iw =0; iw
} }
img = null; img = kimg;
}
}
/**
* 画像に文字を記入します
* @param color 文字の色
* @param stringsize 文字サイズ
* @param s 記入する文字
* @param x 文字位置(x方向)
* @param y 文字位置(y方向)
*/
public void writeString( java.awt.Color color , int stringsize , String s , int x ,int y )
{
java.awt.Graphics2D g = img.createGraphics();
g.setFont( new java.awt.Font( null , java.awt.Font.BOLD , stringsize ) );
g.setColor( color );
g.drawString( s , x , y );
}
/**
* 画像をBMPファイル形式で保存します
* @param savefilename 保存するファイル名
*/
public void saveBmp( String savefilename )
{
Bmp bmp = new Bmp();
bmp.loadBufferedImage( img );
bmp.saveBmp( savefilename );
}
/**
* 画像をJPG形式で保存します。
* @param savefilename 保存するファイル名
*/
public void saveJpg( String savefilename )
{
try {
java.io.File f = new java.io.File( savefilename );
javax.imageio.ImageIO.write( img , "jpg", f );
}catch (Exception e) { e.printStackTrace(); }
return;
}
/**
* 画像をpng形式で保存します。
* @param savefilename 保存するファイル名
*/
public void savePng( String savefilename )
{
try {
java.io.File f = new java.io.File( savefilename );
javax.imageio.ImageIO.write( img , "png", f );
}catch (Exception e) { e.printStackTrace(); }
return;
}
}
最終更新日: 2017-01-15 10:44:56
ともさんのHP >プロブラミング >自作JavaLibrary >画像を「拡大縮小回転反転文字の記入」して保存するクラス
ツイート