ともさんの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 for(int ih =0; ih kimg.setRGB( ih , (img.getWidth()-iw-1) , img.getRGB(iw, ih) );
} }
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 for(int ih =0; ih kimg.setRGB( (img.getHeight()-ih-1) , iw , img.getRGB(iw, ih) );
} }
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 for(int ih =0; ih kimg.setRGB( (img.getWidth()-iw-1) , (img.getHeight()-ih-1) , img.getRGB(iw, ih) );
} }
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 for(int ih =0; ih kimg.setRGB( (img.getWidth()-iw-1) , ih , img.getRGB(iw, ih) );
} }
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 for(int ih =0; ih kimg.setRGB( iw , img.getHeight()-ih-1 , img.getRGB(iw, ih) );
} }
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 >画像を「拡大縮小回転反転文字の記入」して保存するクラス

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

カイズカイブキの剪定  
家庭菜園  
机上棚とプリンタ棚の自作  
洋裁CAD使いかた動画  
ウエスト切り替えワンピース型紙のダウンロード  
袴の作り方  
布団の切りかた  
チューリップハットの作りかた  
自作温室の設計  
JAVAでメール送信  
必要な肥料の量と種類  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます