Java実装グループの画像合成

パッケージcom.zovon.util;

輸入java.awt.AlphaCompositeの;
インポートをjava.awt.Color;
輸入いるjava.awt.font。
輸入java.awt.Graphics;
輸入java.awt.Graphics2D;
輸入はjava.awt.Image;
輸入java.awt.geom.AffineTransformの。
輸入java.awt.image.AffineTransformOp;
輸入java.awt.image.BufferedImage;
輸入java.io.BufferedInputStreamの;
輸入java.io.BufferedOutputStream;
インポートのjava.io.File;
輸入java.io.FileInputStream;
輸入java.io.FileNotFoundException。
輸入java.io.FileOutputStreamは、
インポートにjava.io.IOException;
輸入java.io.InputStreamを。
インポートにjava.io.OutputStream;
輸入はjava.util.ArrayList;
輸入はjava.util.List;

輸入javax.imageio.ImageIO;

/ **
 *このクラスは、画像処理クラスです
 * 
 * @Author王永豊
 *出典:のhttp://www.cnblogs.com/zovon/p/4345501.html
 * /
パブリック最終クラスImageUtil {
    / **画像フォーマット:JPG * /
    プライベート静的最後の文字列PICTRUE_FORMATE_JPG =「JPG」。

    プライベートImageUtil(){
    }
/ **
     *組み合わせたアバターを生成します
     * 
     * @paramパス
     *ユーザー画像
     * @throws IOExceptionが
     * /
    公共の静的な無効getCombinationOfhead(一覧<文字列>のパス)
            スローのIOException {
        一覧<BufferedImageの> BufferedImageの=新しいのArrayList <BufferedImageの>();
        //圧縮生成された全ての画像の画像サイズは50×50同意です
        以下のために(; I <paths.size(); INT iが0 = I ++){
            bufferedImages.add(ImageUtil.resize2(paths.get(I)、50、50、TRUE))。
        }

        int型の幅= 112; //これは、製図板の幅と高さであります

        int型高さ= 112; //これは、製図板の高さがあります

        // BufferedImage.TYPE_INT_RGBを定義することができ、独自のAPIを表示することができます

        BufferedImageのoutImage =新しいBufferedImageの(幅、高さ、
                BufferedImage.TYPE_INT_RGB);

        //キャンバスを生成します
        グラフィックG = outImage.getGraphics()。
        
        Graphics2D G2D =(のGraphics2D)G。
        
        //背景色を設定
        g2d.setBackground(新色(231231231));
        
        //が充填されている描画面の現在の背景色を使用して指定された矩形を消去します。
        g2d.clearRect(0、0、幅、高さ)。
        
        //スタイルを組み合わせた画像、現在4の種類を生成する裁判官の数に基づいて、一緒にピースに画像を始めます
        int型J = 1;
        以下のために(INT I 1 =; I <= bufferedImages.size(); iが++){
            IF(bufferedImages.size()== 4){
                IF(I <= 2){
                    g2d.drawImage(bufferedImages.get(I  -  1)、50 * I + 4 * I
                            -  50、4、NULL);
                } そうしないと {
                    g2d.drawImage(bufferedImages.get(I  -  1)、50 * J + 4 * J
                            -  50、58、NULL);
                    J ++;
                }
            }そうであれば(bufferedImages.size()== 3){
                IF(I <= 1){

                    g2d.drawImage(bufferedImages.get(I  -  1)、31、4、NULL);

                } そうしないと {

                    g2d.drawImage(bufferedImages.get(I  -  1)、50 * J + 4 * J
                            -  50、58、NULL);

                    J ++;
                }

            }そうであれば(bufferedImages.size()== 2){

                g2d.drawImage(bufferedImages.get(I  -  1)、50 * I + 4 * I  -  50、
                        31、NULL);

            }そうであれば(bufferedImages.size()== 1){

                g2d.drawImage(bufferedImages.get(I  -  1)、31、31、NULL);

            }

            ここで色を塗った単語の色を変更する//必要。クラスはするAlphaCompositeを使用する場合があります
        }

        文字列OUTPATH = "E:\\ b.jpg"。

        文字列フォーマット=「JPG」。

        ImageIO.write(outImage、フォーマット、新しいファイル(OUTPATH));
    }

    / **
     *イメージスケーリング
     * 
     * @param filePathに
     *画像のパス
     * @paramの高さ
     *高さ
     * @param幅
     *幅
     * @Param BB
     *比率は必要ありませんパディング
     * /
    パブリック静的のバッファ画像resize2(文字列filePathに、int型の高さ、int型の幅は、
            ブールBB){
        {試します
            ダブル比= 0; //スケーリング
            ファイルf =新しいファイル(filePathに);
            BufferedImageのBI = ImageIO.read(F)。
            画像ITEMP = bi.getScaledInstance(幅、高さ、
                    Image.SCALE_SMOOTH);
            //計算比
            IF((bi.getHeight()>高さ)||(bi.getWidth()>幅)){
                IF(bi.getHeight()> bi.getWidth()){
                    比率=(新しい整数(高さ))。のdoubleValue()
                            / Bi.getHeight();
                } そうしないと {
                    比率=(新しい整数(幅))のdoubleValue()/ bi.getWidth()。
                }
                =新しいAffineTransformOpのAffineTransformOp(
                        AffineTransform.getScaleInstance(比率、割合)、NULL);
                ITEMP = op.filter(BI、NULL);
            }
            IF(BB){
                // copyimg(filePathに、 "D:\\ IMG")。
                BufferedImageのイメージ=新しいBufferedImageの(幅、高さ、
                        BufferedImage.TYPE_INT_RGB);
                Graphics2D G = image.createGraphics()。
                g.setColor(Color.white)。
                g.fillRect(0、0、幅、高さ)。
                もし(幅== itemp.getWidth(ヌル))
                    g.drawImage(ITEMP、0、(高 -  itemp.getHeight(NULL))/ 2、
                            itemp.getWidth(ゼロ)、itemp.getHeight(ゼロ)
                            Color.white、NULL);
                そうしないと
                    g.drawImage(ITEMP、(幅 -  itemp.getWidth(NULL))/ 2、0、
                            itemp.getWidth(ゼロ)、itemp.getHeight(ゼロ)
                            Color.white、NULL);
                )(g.dispose。
                ITEMP画像を=。
            }
            リターン(BufferedImageの)ITEMP。
        }キャッチ(IOExceptionを電子){
            e.printStackTrace();
        }
        ヌルを返します。
    }

}

  転送します。https://www.cnblogs.com/zovon/p/4345501.html

おすすめ

転載: www.cnblogs.com/wangyu19900123/p/12212722.html