/ ** * @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); // コール リターンフォント; / / リターン・フォント
2次元コードの画像の書き込み正と負の絵フォント、および書き込みへのJavaコードの実装
おすすめ
転載: www.cnblogs.com/qingmuchuanqi48/p/12079376.html
ランキング