2次元コードの画像の書き込み正と負の絵フォント、および書き込みへのJavaコードの実装

/ ** 
     * @param filePathに
     *ソース画像のパス
     * @param markContent 
     *写真は、コンテンツを追加する
     * @param OUTPATH 
     実現される機能の内部*フォントカラー出力画像のパス
     *             
     * @param  
     * / 
    // テキストJPG追加する
    パブリック  ブール createStringMark(URL文字列、文字列filePathに、文字列markContent、INT R&LT、INT G、INT {B、CHOOSEFONT文字列)
        イメージアイコンimgIcon = 新しい新しいイメージアイコン(filePathに); 
        イメージtheImg =imgIcon.getImage();
        int型の幅= theImg.getWidth(ヌル)== -1?200:theImg.getWidth(NULL )。
        int型の高さ= theImg.getHeight(ヌル)== -1?200:theImg.getHeight(NULL )。
        System.out.println(幅)。
        System.out.println(高さ)。
        System.out.println(theImg)。
        バッファ画像bimage = 新しいBufferedImageの(幅、高さ、BufferedImage.TYPE_INT_RGB)。
        Graphics2D G = bimage.createGraphics()。
 
        // カラーmycolor1 = Color.white。
        色mycolor1 = 新しいです色(255,255,255 ); 
        g.setColor(mycolor1); 
        g.setBackground(Color.red); 
        G.drawImage(theImg、 0、0、NULL); // キャンバス上の画像、ビデオ、またはキャンバスのレンダリング方法。
        // フォント=新たな新しいフォントのフォント(Font.BOLD、200は、 "太字");   
        フォントのフォント= 新しい新しいフォント(CHOOSEFONT、Font.BOLD、200である);   
        フォント =フォント(200で); 
        g.setFont(フォント); // フォント、フォントスタイル、サイズワード350 
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING、RenderingHints.VALUE_ANTIALIAS_ONは);
         // X座標を計算するテキストの長さを計算する中心 
        メトリックス用のFM =をg.getFontMetrics(フォント);
         INT textWidth = fm.stringWidth(markContent);
         INT widthX =(幅- textWidth)/ 2 ;
         // このテキストは、画像内の位置(x、y)の最初のあなたがあるを表します。セット内容。
        g.drawString(markContent、widthX、1130 );   
        
        カラーmycolor = 新しい新色(R&LT、G、B); 
        g.setColor(mycolor); 
        g.setBackground(Color.red); 
        // G.drawImage(theImg、0、 0、NULL); 
        フォントrotatefont = 新しい新しいフォント(CHOOSEFONT、Font.BOLD、200である。)   
        rotatefont =フォント(200である); 
        g.setFont(rotatefont); //フォント、フォントスタイル、サイズワード350 
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING、RenderingHints.VALUE_ANTIALIAS_ON); 
        メトリックスrotatefm = g.getFontMetrics(フォント);
         INT rotatetextWidth = rotatefm.stringWidth(markContent);
         INT rotatewidthX =(幅- rotatetextWidth )/ 2 ;
         // ビデオ180度フォント反転 
        g.translate(rotatewidthX rotatetextWidth +、350 ); 
        g.rotateを(Math.toRadians( 180 )); 
        g.drawString(markContent、 0、0 ); 
        g.dispose( ); 
        試み{
             ロング CURRENTTIME =System.currentTimeMillis(); 
            文字列のpathdate = 新しい。SimpleDateFormatの( "YYYY / MM / DD / HH / HH / MM / SS")形式(新しい日付()); 
            文字列のパス = "F:\\ pic2018 \\" + pathdate。
            ファイルファイル = 新しいファイル(パス);
            もし(!file.exists()){ 
                file.mkdirs(); 
            } 
            QRCodeUtil QR = 新しいQRCodeUtil()。
            文字列qrCodepath = qr.Util(URL、pathdate)。
            文字列OUTPATH =パス+ "\\" + CURRENTTIME + "JPG" 
            OUT AのFileOutputStream = 新新のFileOutputStream(OUTPATH); // 特定の出力ファイル名を持つ最初の 
            JPEGImageEncoderエンコーダ= JPEGCodec.createJPEGEncoder(OUT); 
            のJPEGEncodeParamのparam = encoder.getDefaultJPEGEncodeParam(bimage); 
            (param.setQuality 100、真の); //
             encoder.encode(bimage、PARAM); 
            
            入力ストリームである = 新しい新規のFileInputStream(OUTPATH);
             // フローデコーダJPEG画像ストリームを介してJPEGデータを作成 
            なJPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(IS);
             //現在のJPEGデータストリームを復号する、オブジェクト戻りのBufferedImage 
            BufferedImageのbuffImg = jpegDecoder.decodeAsBufferedImage();
             // 取得し、ブラシオブジェクト 
            グラフィックG2 = buffImg.getGraphics(); 
 
            // パス小画像 
            イメージアイコンのQrcodeimgIcon = 新しい新しいイメージアイコン(qrCodepath);
             // GET Imageオブジェクト。
            IMG =画像QrcodeimgIcon.getImage();
             // 。大きな絵に描かれた小さな絵は、5300は、小さな画像大きな画像上の自分の位置を表しています。
            g2.drawImage(IMG、50、1560、NULL );
             //は、色を設定します。
            g2.setColor(Color.WHITE); 
            g2.dispose()。
            OSのOutputStream新新 = たFileOutputStream(+パス"\\" + CURRENTTIME + "宗" + "JPGは" );
             // メモリ内の画像データを符号化するキー符号化を記録します。
            EN = JPEGImageEncoder JPEGCodec.createJPEGEncoder(OS); 
            en.encode(buffImg); 
            is.close(); 
            にos.close(); 
            
            out.close(); 
        } キャッチ(例外E){
             リターン falseに; 
        } 
        戻り trueに; 
    } 
     // 最初のパラメータは、外部フォント、フォントサイズ、及び第二の名前がである
    パブリック 静的フォントloadFont(文字列fontFileName、フロートfontSize){
         トライ
        } {
            ファイルファイル = 新しいファイル(fontFileName)。
            FileInputStreamのaixing = 新しいFileInputStreamを(ファイル); 
            フォントdynamicFont = Font.createFont(Font.TRUETYPE_FONT、aixing)。
            フォントdynamicFontPt = dynamicFont.deriveFont(のfontSize)。
            aixing.close(); 
            返すdynamicFontPtを。
        } 
        キャッチ(例外e)// 异常处理
        { 
            e.printStackTrace(); 
            戻る 新しいフォント( "宋体"、Font.BOLD、200 ); 
    } 
    公共   フォントのフォント(INT のfontSize){ 
        文字列ルート =はSystem.getProperty( "はuser.dir"); // アイテムルートパス 
        フォントのフォント= ImageEdit.loadFont(ルート+ "/FZXBSJW.TTF"のfontSize); // コール
        リターンフォント; / / リターン・フォント

おすすめ

転載: www.cnblogs.com/qingmuchuanqi48/p/12079376.html