??? ?? ???? ???? ?? ??? ???? ????? ?? ? ? ???, ??? ???? ???? ??? ????? ?? ??? ? ????? ??? ?? ??? ????.
?? ?? ????? ???????.
---------------?? ????------ - -------
1. ??? ???? ??
import?java.awt.Color; import?java.awt.Font; import?java.awt.Graphics2D; import?java.awt.Image; import?java.awt.image.BufferedImage; import?java.io.File; import?java.io.FileOutputStream; import?javax.imageio.ImageIO; /** ?*?給圖片添加文字水印 ?*? ?*?@author?liqiang ?* ?*/ public?class?WaterMarkUtils?{ ????/** ?????*?@param?args ?????*/ ????public?static?void?main(String[]?args)?{ ????????//?原圖位置,?輸出圖片位置,?水印文字顏色,?水印文字 ????????new?WaterMarkUtils().mark("C:/Users/liqiang/Desktop/圖片/kdmt.jpg",?"C:/Users/liqiang/Desktop/圖片/kdmt1.jpg", ????????????????Color.red,?"圖片來源:XXX"); ????} ????/** ?????*?圖片添加水印 ?????*? ?????*?@param?srcImgPath ?????*????????????需要添加水印的圖片的路徑 ?????*?@param?outImgPath ?????*????????????添加水印后圖片輸出路徑 ?????*?@param?markContentColor ?????*????????????水印文字的顏色 ?????*?@param?waterMarkContent ?????*????????????水印的文字 ?????*/ ????public?void?mark(String?srcImgPath,?String?outImgPath,?Color?markContentColor,?String?waterMarkContent)?{ ????????try?{ ????????????//?讀取原圖片信息 ????????????File?srcImgFile?=?new?File(srcImgPath); ????????????Image?srcImg?=?ImageIO.read(srcImgFile); ????????????int?srcImgWidth?=?srcImg.getWidth(null); ????????????int?srcImgHeight?=?srcImg.getHeight(null); ????????????//?加水印 ????????????BufferedImage?bufImg?=?new?BufferedImage(srcImgWidth,?srcImgHeight,?BufferedImage.TYPE_INT_RGB); ????????????Graphics2D?g?=?bufImg.createGraphics(); ????????????g.drawImage(srcImg,?0,?0,?srcImgWidth,?srcImgHeight,?null); ????????????//?Font?font?=?new?Font("Courier?New",?Font.PLAIN,?12); ????????????Font?font?=?new?Font("宋體",?Font.PLAIN,?20); ????????????g.setColor(markContentColor);?//?根據(jù)圖片的背景設置水印顏色 ????????????g.setFont(font); ????????????int?x?=?srcImgWidth?-?getWatermarkLength(waterMarkContent,?g)?-?3; ????????????int?y?=?srcImgHeight?-?3; ????????????//?int?x?=?(srcImgWidth?-?getWatermarkLength(watermarkStr,?g))?/?2; ????????????//?int?y?=?srcImgHeight?/?2; ????????????g.drawString(waterMarkContent,?x,?y); ????????????g.dispose(); ????????????//?輸出圖片 ????????????FileOutputStream?outImgStream?=?new?FileOutputStream(outImgPath); ????????????ImageIO.write(bufImg,?"jpg",?outImgStream); ????????????outImgStream.flush(); ????????????outImgStream.close(); ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????} ????/** ?????*?獲取水印文字總長度 ?????*? ?????*?@param?waterMarkContent ?????*????????????水印的文字 ?????*?@param?g ?????*?@return?水印文字總長度 ?????*/ ????public?int?getWatermarkLength(String?waterMarkContent,?Graphics2D?g)?{ ????????return?g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(),?0,?waterMarkContent.length()); ????} }
??:
2. ??? ??? ???? ??
import?java.awt.AlphaComposite; import?java.awt.Graphics2D; import?java.awt.Image; import?java.awt.RenderingHints; import?java.awt.image.BufferedImage; import?java.io.File; import?java.io.FileOutputStream; import?java.io.OutputStream; import?javax.imageio.ImageIO; import?javax.swing.ImageIcon; /** ?*?給圖片添加圖片 ?*? ?*?@author?liqiang ?* ?*/ public?class?WaterMarkUtils?{ ????/** ?????*?@param?args ?????*/ ????public?static?void?main(String[]?args)?{ ????????String?srcImgPath?=?"C:/Users/liqiang/Desktop/圖片/kdmt.jpg"; ????????String?iconPath?=?"C:/Users/liqiang/Desktop/圖片/qlq.jpeg"; ????????String?targerPath?=?"C:/Users/liqiang/Desktop/圖片/qlq1.jpeg"; ????????String?targerPath2?=?"C:/Users/liqiang/Desktop/圖片/qlq2.jpeg"; ????????//?給圖片添加水印 ????????WaterMarkUtils.markImageByIcon(iconPath,?srcImgPath,?targerPath); ????????//?給圖片添加水印,水印旋轉-45 ????????WaterMarkUtils.markImageByIcon(iconPath,?srcImgPath,?targerPath2,?-45); ????} ????/** ?????*?給圖片添加水印 ?????*? ?????*?@param?iconPath ?????*????????????水印圖片路徑 ?????*?@param?srcImgPath ?????*????????????源圖片路徑 ?????*?@param?targerPath ?????*????????????目標圖片路徑 ?????*/ ????public?static?void?markImageByIcon(String?iconPath,?String?srcImgPath,?String?targerPath)?{ ????????markImageByIcon(iconPath,?srcImgPath,?targerPath,?null); ????} ????/** ?????*?給圖片添加水印、可設置水印圖片旋轉角度 ?????*? ?????*?@param?iconPath ?????*????????????水印圖片路徑 ?????*?@param?srcImgPath ?????*????????????源圖片路徑 ?????*?@param?targerPath ?????*????????????目標圖片路徑 ?????*?@param?degree ?????*????????????水印圖片旋轉角度 ?????*/ ????public?static?void?markImageByIcon(String?iconPath,?String?srcImgPath,?String?targerPath,?Integer?degree)?{ ????????OutputStream?os?=?null; ????????try?{ ????????????Image?srcImg?=?ImageIO.read(new?File(srcImgPath)); ????????????BufferedImage?buffImg?=?new?BufferedImage(srcImg.getWidth(null),?srcImg.getHeight(null), ????????????????????BufferedImage.TYPE_INT_RGB); ????????????//?得到畫筆對象 ????????????//?Graphics?g=?buffImg.getGraphics(); ????????????Graphics2D?g?=?buffImg.createGraphics(); ????????????//?設置對線段的鋸齒狀邊緣處理 ????????????g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,?RenderingHints.VALUE_INTERPOLATION_BILINEAR); ????????????g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null),?srcImg.getHeight(null),?Image.SCALE_SMOOTH),?0, ????????????????????0,?null); ????????????if?(null?!=?degree)?{ ????????????????//?設置水印旋轉 ????????????????g.rotate(Math.toRadians(degree),?(double)?buffImg.getWidth()?/?2,?(double)?buffImg.getHeight()?/?2); ????????????} ????????????//?水印圖象的路徑?水印一般為gif或者png的,這樣可設置透明度 ????????????ImageIcon?imgIcon?=?new?ImageIcon(iconPath); ????????????//?得到Image對象。 ????????????Image?img?=?imgIcon.getImage(); ????????????float?alpha?=?0.5f;?//?透明度 ????????????g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,?alpha)); ????????????//?表示水印圖片的位置 ????????????g.drawImage(img,?150,?300,?null); ????????????g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); ????????????g.dispose(); ????????????os?=?new?FileOutputStream(targerPath); ????????????//?生成圖片 ????????????ImageIO.write(buffImg,?"JPG",?os); ????????????System.out.println("圖片完成添加Icon印章。。。。。。"); ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????}?finally?{ ????????????try?{ ????????????????if?(null?!=?os) ????????????????????os.close(); ????????????}?catch?(Exception?e)?{ ????????????????e.printStackTrace(); ????????????} ????????} ????} }
?? ?? :
(?? ??? ????: java ??? ????)
---------------------------- - -PDF ????(itext add watermark)-------------------------------
PDF? ??? ????? ??? ????? ?????. ??? ??? (? ???? ??? ???? ? ?? ???? ??)
?? ???:
<dependencies> ????????<dependency> ????????????<groupid>com.lowagie</groupid> ????????????<artifactid>itextasian</artifactid> ????????????<version>1.0</version> ????????</dependency> ????????<dependency> ????????????<groupid>com.lowagie</groupid> ????????????<artifactid>itext</artifactid> ????????????<version>2.1.7</version> ????????</dependency> ????</dependencies>
?? ??:
import?java.awt.Color; import?java.io.BufferedOutputStream; import?java.io.File; import?java.io.FileOutputStream; import?java.io.IOException; import?java.text.SimpleDateFormat; import?java.util.Calendar; import?com.lowagie.text.DocumentException; import?com.lowagie.text.Element; import?com.lowagie.text.Image; import?com.lowagie.text.pdf.BaseFont; import?com.lowagie.text.pdf.PdfContentByte; import?com.lowagie.text.pdf.PdfGState; import?com.lowagie.text.pdf.PdfReader; import?com.lowagie.text.pdf.PdfStamper; public?class?TestWaterPrint?{ ????public?static?void?main(String[]?args)?throws?DocumentException,?IOException?{ ????????//?要輸出的pdf文件 ????????BufferedOutputStream?bos?=?new?BufferedOutputStream(new?FileOutputStream(new?File("E:/abc.pdf"))); ????????Calendar?cal?=?Calendar.getInstance(); ????????SimpleDateFormat?format?=?new?SimpleDateFormat("yyyy-MM-dd?hh:mm:ss"); ????????//?將pdf文件先加水印然后輸出 ????????setWatermark(bos,?"G:/1.pdf",?format.format(cal.getTime())?+?"??下載使用人:"?+?"測試user",?16); ????} ????/** ?????*? ?????*?@param?bos輸出文件的位置 ?????*?@param?input ?????*????????????原PDF位置 ?????*?@param?waterMarkName ?????*????????????頁腳添加水印 ?????*?@param?permission ?????*????????????權限碼 ?????*?@throws?DocumentException ?????*?@throws?IOException ?????*/ ????public?static?void?setWatermark(BufferedOutputStream?bos,?String?input,?String?waterMarkName,?int?permission) ????????????throws?DocumentException,?IOException?{ ????????PdfReader?reader?=?new?PdfReader(input); ????????PdfStamper?stamper?=?new?PdfStamper(reader,?bos); ????????int?total?=?reader.getNumberOfPages()?+?1; ????????PdfContentByte?content; ????????BaseFont?base?=?BaseFont.createFont("STSong-Light",?"UniGB-UCS2-H",?BaseFont.EMBEDDED); ????????PdfGState?gs?=?new?PdfGState(); ????????for?(int?i?=?1;?i?<p>?? ??: </p><p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/image/584/251/170/1615519483789827.png" class="lazy" title="1615519483789827.png" alt="Java? ??? ???? ? ??? ???? ??? ?????."></p><p>??: ?? ??? ??</p><p>1. jar? ?? iTextAsian ??? ?????</p><pre class="brush:php;toolbar:false">BaseFont.createFont("STSong-Light",?"UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
2. Windows ??? ??? ?????
BaseFont.createFont("C:/WINDOWS/Fonts/SIMYOU.TTF",?BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
3. ??? ??(ClassPath)? ?????. ?, ttf ??? src ????? ?????
BaseFont.createFont("/SIMYOU.TTF",?BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
3?? ??? ????? ????????. ????? ????? ???? itext? ?????. ??? ??? ???? ???? ???? ??? ? ????.
??: PDF ??? ??? ??? ??? ?? ???? ?? ?? ??(?: ??? ??? ?? ?? ???? ??):
package?cn.xm.exam.test; import?java.awt.FontMetrics; import?java.io.BufferedOutputStream; import?java.io.File; import?java.io.FileOutputStream; import?java.io.IOException; import?javax.swing.JLabel; import?com.itextpdf.text.DocumentException; import?com.itextpdf.text.Element; import?com.itextpdf.text.Rectangle; import?com.itextpdf.text.pdf.BaseFont; import?com.itextpdf.text.pdf.PdfContentByte; import?com.itextpdf.text.pdf.PdfGState; import?com.itextpdf.text.pdf.PdfReader; import?com.itextpdf.text.pdf.PdfStamper; public?class?TestWaterPrint?{ ????public?static?void?main(String[]?args)?throws?DocumentException,?IOException?{ ????????//?要輸出的pdf文件 ????????BufferedOutputStream?bos?=?new?BufferedOutputStream(new?FileOutputStream(new?File("F:/test1.pdf"))); ????????//?將pdf文件先加水印然后輸出 ????????setWatermark(bos,?"F:/test.pdf",?"測試user"); ????} ????/** ?????*? ?????*?@param?bos輸出文件的位置 ?????*?@param?input ?????*????????????原PDF位置 ?????*?@param?waterMarkName ?????*????????????頁腳添加水印 ?????*?@throws?DocumentException ?????*?@throws?IOException ?????*/ ????public?static?void?setWatermark(BufferedOutputStream?bos,?String?input,?String?waterMarkName) ????????????throws?DocumentException,?IOException?{ ????????PdfReader?reader?=?new?PdfReader(input); ????????PdfStamper?stamper?=?new?PdfStamper(reader,?bos); ????????//?獲取總頁數(shù)?+1,?下面從1開始遍歷 ????????int?total?=?reader.getNumberOfPages()?+?1; ????????//?使用classpath下面的字體庫 ????????BaseFont?base?=?null; ????????try?{ ????????????base?=?BaseFont.createFont("/calibri.ttf",?BaseFont.IDENTITY_H,?BaseFont.NOT_EMBEDDED); ????????}?catch?(Exception?e)?{ ????????????//?日志處理 ????????????e.printStackTrace(); ????????} ????????//?間隔 ????????int?interval?=?-5; ????????//?獲取水印文字的高度和寬度 ????????int?textH?=?0,?textW?=?0; ????????JLabel?label?=?new?JLabel(); ????????label.setText(waterMarkName); ????????FontMetrics?metrics?=?label.getFontMetrics(label.getFont()); ????????textH?=?metrics.getHeight(); ????????textW?=?metrics.stringWidth(label.getText()); ????????System.out.println("textH:?"?+?textH); ????????System.out.println("textW:?"?+?textW); ????????//?設置水印透明度 ????????PdfGState?gs?=?new?PdfGState(); ????????gs.setFillOpacity(0.4f); ????????gs.setStrokeOpacity(0.4f); ????????Rectangle?pageSizeWithRotation?=?null; ????????PdfContentByte?content?=?null; ????????for?(int?i?=?1;?i?<p>?? ??: </p><p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/image/266/263/910/1615519548460168.png" class="lazy" title="1615519548460168.png" alt="Java? ??? ???? ? ??? ???? ??? ?????."></p><p>??: ???? itext ???? ?? ?? </p><p>Above BaseFont? ?????? ???? ??? ? ????. Font? ???? ??? ? ??? setFontAndSize ???? Font ????? ???? ????. ??? ? ??? ??? ? ?? ??? ??? ????. </p><p>?: ? ???? ??? ??? ???? ???? ?? </p><pre class="brush:php;toolbar:false">package?cn.xm.exam.test; import?java.io.BufferedOutputStream; import?java.io.File; import?java.io.FileOutputStream; import?java.io.IOException; import?com.itextpdf.text.DocumentException; import?com.itextpdf.text.Rectangle; import?com.itextpdf.text.pdf.BaseFont; import?com.itextpdf.text.pdf.PdfContentByte; import?com.itextpdf.text.pdf.PdfGState; import?com.itextpdf.text.pdf.PdfReader; import?com.itextpdf.text.pdf.PdfStamper; public?class?TestWaterPrint?{ ????public?static?void?main(String[]?args)?throws?DocumentException,?IOException?{ ????????//?要輸出的pdf文件 ????????BufferedOutputStream?bos?=?new?BufferedOutputStream(new?FileOutputStream(new?File("F:/test2.pdf"))); ????????//?將pdf文件先加水印然后輸出 ????????setWatermark(bos,?"F:/test.pdf",?"測試user123456789"); ????} ????/** ?????*? ?????*?@param?bos輸出文件的位置 ?????*?@param?input ?????*????????????原PDF位置 ?????*?@param?waterMarkName ?????*????????????頁腳添加水印 ?????*?@throws?DocumentException ?????*?@throws?IOException ?????*/ ????public?static?void?setWatermark(BufferedOutputStream?bos,?String?input,?String?waterMarkName) ????????????throws?DocumentException,?IOException?{ ????????PdfReader?reader?=?new?PdfReader(input); ????????PdfStamper?stamper?=?new?PdfStamper(reader,?bos); ????????//?獲取總頁數(shù)?+1,?下面從1開始遍歷 ????????int?total?=?reader.getNumberOfPages()?+?1; ????????//?使用classpath下面的字體庫 ????????BaseFont?base?=?null; ????????try?{ ????????????base?=?BaseFont.createFont("/calibri.ttf",?BaseFont.IDENTITY_H,?BaseFont.NOT_EMBEDDED); ????????}?catch?(Exception?e)?{ ????????????//?日志處理 ????????????e.printStackTrace(); ????????} ????????//?設置水印透明度 ????????PdfGState?gs?=?new?PdfGState(); ????????gs.setFillOpacity(0.4f); ????????gs.setStrokeOpacity(0.4f); ????????PdfContentByte?content?=?null; ????????for?(int?i?=?1;?i?<p>?? ??: </p><p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/image/815/871/608/1615519581569493.png" class="lazy" title="1615519581569493.png" alt="Java? ??? ???? ? ??? ???? ??? ?????."></p><p>?? ?? ??: <a href="http://www.miracleart.cn/java/guide/" target="_blank">java ?? ????</a></p>
? ??? Java? ??? ???? ? ??? ???? ??? ?????.? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

JDBC ????? ???? ????? ?? ?? ?? ??? ?? ?? ??? ?? ? ?? ??? ?? ?? ?? ??? ???????. 1. ????? ????? Conn.SetAutoCommit (False)?? ??????. 2. ??? ? ????? ?? ?? SQL ??? ?????. 3. ?? ??? ??? ?? Conn.commit ()?? ???? ??? ???? ???? ?? ??? ???? Conn.Rollback ()?? ??????. ???, ? ??? ???? ????, ??? ???? ????, ?? ??? ??? ?? ??? ??? ???? ? ???????. ?? ?? ?? ???? ????? ??? ???? ?? ?? ???? ???? ??? ????? ?? ??? ??? ? ?? ???? ?? ????.

?? ?? ? ?? ???? ???? ?? Java.Time ???? ???? ??????. 2. LocalDate, LocalDateTime ? LocalTime? ?? ?? ??? ??? ?????. 3. () ???? ???? ?? ??? ??? ????. 4. ???/???? ??? ???? ??? ????? ??? ??????. 5. ZonedDateTime ? Zoneid? ???? ???? ??????. 6. DateTimeFormatter? ?? ?? ? ?? ?? ?? ???; 7. ??? ?? ?? ?? ??? ????? ?? ??????. ?? Java? ?? ??? ???? ??? ??? ???? Java.Timeapi ??? ?? ??? ???????.

Pre-FormancetArtUptimeMoryUsage, Quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless sinarios.2.thyvelopecosyste,

NetworkPortSandfirewallsworkTogetToenableCommunication whileensuringsecurity.1.networkportSarevirtualendpointsnumbered0–65535, Withwell-nownports like80 (http), 443 (https), 22 (ssh) ? 25 (smtp) ?? (specservices

Java 's Garbage Collection (GC)? ???? ???? ???? ??????, ?? ? ??? ??? ? ??? ??? ??? ??? ????. 1.GC? ?? ?? (? : ?? ??, ?? ???, ?? ?? ?)?? ??? ???? ????, ?? ? ??? ??? ???? ?????. 2. ?? ???? ????? ????, ?? ?? ??? ??? ???? ?? ??? ??????. 3. ?? ?? ?? ?? : ??? ?? (Eden, S0, S1)? ?? ????? ?????. ??? ??? ?? ? MajorGC? ???? ? ??? ? ????. Metaspace? ??? ?? ???? ?????. 4. JVM? ??? GC ??? ?????. SerialGC? ??? ?? ????? ?????. ParallelGC? ???? ??????. CMS? ?? ???

GradleisBetTerChoiceFormostNewProjectSduetoitssuperiorflexible, Performance, and ModernToolingsupport.1.Gradle'Sgroovy/kotlindslismoreConcisENDEXPRESSIVETHANMAVEN'SVOSEXML.2.GradleOutsMaveninbuildweedweedweedweedweedweedweedweedweedweedweedweedweedweede

DEFER? ??? ???? ?? ??? ??? ???? ? ?????. ?? ??? ?? ? ? ?? ????, ??? ??? ? ?? ?? (LIFO)? ??? ?????. 1. ?? ??? ??? ? ??? ?????. 2. ?? ??? ?? ??? ??? ????? ?????. 3. ?? ? ?? ?? ??? ? ????. 4. ??? ?????? ??? ??? ???? ?????. 5. ?? ??? ???? ?? ??? ?? ??? ?????. ??? ??? ?? ?? ? ???? ???? ? ????.

??? htmlinput ??? ???? ??? ???? ????? ??? ??? ?? ??? ???? ???? ? ????. 1. ???, ???, ??, ?? ? ??? ?? ??? ??? ?? ?? ?? ??? ???? ???? ??? ? ???? ??? ? ????. 2. HTML5? ?????? ??? ? ?? ?? ??? ?? ? ??? URL, ??, ?? ? ??? ?? ??? ??? ??????. 3. ?? ?? ? ? ??? ??? ???? ?? ??? ???? ???? ?? ???? ?? ???? ???? ?? ? ? ??? ?? ???????.
