สองวันนี้ฉันได้อัปโหลดรูปภาพตามความต้องการของฉัน พูดตามตรงฉันไม่รู้ว่า Java สามารถทำงานได้เช่นนี้ เนื่องจากมีข้อกำหนดฉันจึงไปหาข้อมูลและศึกษา ฉันจะแบ่งปันตอนนี้หวังว่าจะช่วยพี่น้องที่ต้องการ
การเพิ่มลายน้ำลงในรูปภาพทั่วไปนั้นแตกต่างจากการเพิ่มลายน้ำลงในภาพเคลื่อนไหว การเพิ่มลายน้ำลงในรูปภาพทั่วไปเขียนด้วยวิธีการของ Java เฟรมเวิร์ก GIF4J ใช้สำหรับแอนิเมชั่น มีเฟรมเวิร์กมากมายที่สามารถดาวน์โหลดได้ใน CSDN ขอแนะนำให้ดาวน์โหลดเวอร์ชันที่แตกเนื่องจากแพ็คเกจ JAR ดั้งเดิมจะมีลายน้ำที่ไม่สามารถใช้งานได้
นำเข้า Java.awt.*; นำเข้า java.awt.image.bufferedimage; นำเข้า Java.io.*; นำเข้า Javax.imageio.imageio; นำเข้า Javax.swing.imageicon; // นี่คือคลาสของ GIF4J Framework Import com.gif4j.gifdecoder; นำเข้า com.gif4j.gifencoder; นำเข้า com.gif4j.gifimage; นำเข้า com.gif4j.giftransformer; นำเข้า com.gif4j.textpainter; นำเข้า com.gif4j.watermark; /*** สร้างโดย ZXD เมื่อปี 2018/1/18 */ คลาสสาธารณะ imageRemarkutil {// ลายน้ำโปร่งใสลอยตัวส่วนตัวอัลฟ่า = 0.5f; // ลายน้ำแนวนอนตำแหน่งส่วนตัว INT ตำแหน่ง WIDTH = 150; // ลายน้ำแนวตั้งตำแหน่งส่วนตัว INT ตำแหน่งส่วนตัว = 300; // ความกว้างของลายน้ำความกว้าง int ส่วนตัว = 80; // ลายน้ำสูงความสูง INT ส่วนตัว = 80; // ข้อความลายน้ำตัวอักษรฟอนต์ตัวอักษรส่วนตัว = ตัวอักษรใหม่ ("宋体", font.bold, 72); // ลายน้ำข้อความสีส่วนตัวสี = color.red; / ******************* ภาพปกติพร้อมลายน้ำ **********// ****@param alpha*ลายน้ำโปร่งใส*@param positionWidth*ตำแหน่งลายน้ำแนวนอน*@param positionheight*ตำแหน่งลายน้ำ PositionWidth, int positionheight, ความกว้าง int, ความสูง int, ตัวอักษรตัวอักษร, สีสี) {ถ้า (alpha! = 0.0f) this.alpha = alpha; if (positionWidth! = 0) this.positionWidth = positionWidth; if (positionHeight! = 0) this.positionheight = positionHeight; if (ความสูง! = 0) this.height = ความสูง; if (width! = 0) this.width = ความกว้าง; if (font! = null) this.font = font; if (color! = null) this.color = color; } / ** * เพิ่มภาพลายน้ำลงในภาพ * * @param iconpath * เส้นทางภาพลายน้ำ * @param srcimgpath * เส้นทางภาพต้นฉบับ * @param targetPath * เส้นทางภาพเป้าหมาย * / โมฆะสาธารณะ markimagebyicon (ไอคอนสตริง, สตริง srcimgpath, สตริงเป้าหมาย } / *** เพิ่มภาพลายน้ำลงในภาพและตั้งมุมการหมุนของภาพลายน้ำ** @param iconpath* เส้นทางภาพลายน้ำ* @param srcimgpath* เส้นทางภาพแหล่งที่มา* @param targetPath* เส้นทางภาพเป้าหมาย* @param ระดับการหมุน โมฆะ; ลอง {image srcimg = imageio.read (ไฟล์ใหม่ (srcimgpath)); bufferedImage buffimg = new bufferedImage (srcimg.getWidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 1. รับ brush object graphics2d g = buffimg.createGraphics (); // 2. ตั้งค่าการประมวลผลขอบ jagged ของส่วนบรรทัด 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); // 3. ตั้งค่าการหมุนลายน้ำถ้า (null! = องศา) {g.rotate (math.toradians (องศา), (สองครั้ง) buffimg.getWidth () / 2, (สอง) buffimg.getheight () / 2); } // 4. เส้นทางของภาพลายน้ำภาพลายน้ำโดยทั่วไปคือ GIF หรือ PNG เพื่อให้ความโปร่งใสสามารถตั้งค่า ImageIcon imgicon = ใหม่ ImageIcon (IconPath); // 5. รับวัตถุภาพ Image IMG = imgicon.getImage (); G.SetComposite (alphacomposite.getInstance (alphacomposite.src_atop, alpha)); จำนวนเต็ม x = srcimg.getWidth (null); จำนวนเต็ม y = srcimg.getheight (null); // 6. ตำแหน่งของภาพลายน้ำ G.DrawImage (IMG, X- (PositionWidth+Width), y- (positionHeight+ความสูง), ความกว้าง, ความสูง, null); G.SetComposite (alphacomposite.getInstance (alphacomposite.src_over)); // 7. ปล่อยทรัพยากร g.dispose (); // 8. สร้างภาพ OS = ใหม่ fileOutputStream (targerpath); Imageio.write (buffimg, "jpg", OS); System.out.println ("Image Complete Add Watermark Image"); } catch (exception e) {e.printstacktrace (); } ในที่สุด {ลอง {ถ้า (null! = os) os.close (); } catch (exception e) {e.printstacktrace (); }}}} / ** * เพิ่มข้อความลายน้ำลงในภาพ * * @param logotext * ข้อความลายน้ำ * @param srcimgpath * เส้นทางภาพแหล่งที่มา * @param targetPath * เส้นทางภาพเป้าหมาย * / โมฆะสาธารณะ markimageByText } / ** * เพิ่มข้อความลายน้ำลงในภาพและตั้งมุมการหมุนของข้อความลายน้ำ * * @param logotext * @param logotext * @param srcimgpath * @param targetpath * @param ระดับ * / โมฆะสาธารณะ markimageByText OutputStream OS = NULL; ลอง {// 1. ภาพต้นฉบับอิมเมจภาพ srcimg = imageio.read (ไฟล์ใหม่ (srcimgpath)); bufferedImage buffimg = new bufferedImage (srcimg.getWidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 2. รับกราฟิกวัตถุแปรง 2D g = buffimg.createGraphics (); // 3. ตั้งค่าการประมวลผลขอบ jagged ของส่วนบรรทัด 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); // 4. ตั้งค่าการหมุนลายน้ำถ้า (null! = องศา) {g.rotate (math.toradians (องศา), (สองครั้ง) buffimg.getWidth () / 2, (สอง) buffimg.getheight () / 2); } // 5. ตั้งค่าข้อความลายน้ำ G.SetColor (สี); // 6. ตั้งค่าตัวอักษรข้อความลายน้ำ G.SetFont (แบบอักษร); // 7. ตั้งค่าความโปร่งใสข้อความลายน้ำ G.SetComposite (alphacomposite.getInstance (alphacomposite.src_atop, alpha)); // 8. พารามิเตอร์แรก -> ตั้งค่าเนื้อหาพารามิเตอร์สองตัวถัดไป -> ตำแหน่งพิกัดของข้อความบนรูปภาพ (x, y) g.DrawString (logotext, positionWidth, positionHeight); // 9. ปล่อยทรัพยากร g.dispose (); // 10. สร้างภาพ OS = ใหม่ fileOutputStream (targerpath); Imageio.write (buffimg, "jpg", OS); System.out.println ("Image Complete Add Watermark Text"); } catch (exception e) {e.printstacktrace (); } ในที่สุด {ลอง {ถ้า (null! = is) is.close (); } catch (exception e) {e.printstacktrace (); } ลอง {ถ้า (null! = os) os.close (); } catch (exception e) {e.printstacktrace (); }}} / ******************* ภาพภาพเคลื่อนไหวเป็นลายน้ำ **************** / / ***การปรับขนาดภาพ GIF ผ่านไฟล์โดยตรงคุณสามารถตั้งค่าความกว้างและความสูง* / โมฆะสาธารณะ makegif (ไฟล์ SRC ไฟล์ gifdecoder.decode (src); // สร้างวัตถุ gifimage gifimage resizeimg = giftransformer.resize (gifimage, ความกว้าง, ความสูง, จริง); gifencoder.encode (resizeimg, dest); } // สเกลภาพ GIF ผ่านเส้นทางไฟล์โดยตรงและตั้งค่าความกว้างและความสูงโมฆะสาธารณะ makegif (สตริง src, สตริง dest, ความกว้าง int, ความสูง int) พ่น ioexception {gifimage gifimage = gifdecoder.decode (ไฟล์ใหม่ (src)); // สร้างวัตถุ gifimage Makegif (ไฟล์ใหม่ (SRC), ไฟล์ใหม่ (dest), gifimage.getScreenwidth () / 2, gifimage.getScreenheight () / 2); } // การปรับขนาดภาพ GIF, ไฟล์ผ่านไฟล์, ความกว้างและความสูงไม่สามารถตั้งค่าโมฆะสาธารณะ makegif (ไฟล์ src, ไฟล์ dest) พ่น ioexception {gifimage gifimage = gifdecoder.decode (src); // สร้างวัตถุ gifimage Makegif (src, dest, gifimage.getscreenwidth () / 2, gifimage.getscreenheight () / 2); } // การปรับขนาดภาพ GIF, เส้นทางไฟล์ที่ผ่านและไม่ตั้งค่าความกว้างและความสูงโมฆะสาธารณะ makegif (สตริง src, สตริง dest) พ่น ioexception {makegif (ไฟล์ใหม่ (src), ไฟล์ใหม่ (dest)); } /*** เพิ่มลายน้ำข้อความลงในภาพเคลื่อนไหว* /โมฆะสาธารณะ addtextwatermarkTogif (ไฟล์ SRC, สตริง watermarktext, ไฟล์ dest) พ่น ioexception {// การเริ่มต้นลายน้ำและการตั้งค่า (แบบอักษร, ขนาด, สี) TextPainter TextPainter = New TextPainter TextPainter.SetOutLinePaint (color.white); bufferedImage renderedwatermarktext = textpainter.renderstring (watermarktext, true); // วัตถุอิมเมจ gifimage gf = gifdecoder.decode (src); // รับขนาดภาพ int iw = gf.getScreenWidth (); int ih = gf.getScreenheight (); // รับขนาดลายน้ำ int int tw = renderedwaterText.getWidth (); int th = renderedwaterText.getheight (); // จุดลายน้ำ p = จุดใหม่ (); PX = IW - TW - 5; py = ih - th - 4; // เพิ่มลายน้ำลายน้ำ = ลายน้ำใหม่ (RenderEdwatermarkText, P); gf = watermark.apply (gifdecoder.decode (src), true); // เอาต์พุต gifencoder.encode (gf, dest); } / *** เพิ่มภาพลายน้ำในภาพเคลื่อนไหว* / โมฆะสาธารณะ AddimageWatermarkTogif (ไฟล์ SRC, สตริง Watermarkpath, ไฟล์ DEST) {ลอง {BufferedImage RenderEdwaterText = imageio.read (ไฟล์ใหม่ (watermarkpath)); // วัตถุอิมเมจ gifimage gf = gifdecoder.decode (src); // รับขนาดภาพ int iw = gf.getScreenWidth (); int ih = gf.getScreenheight (); // รับขนาดลายน้ำ int int tw = renderedwaterText.getWidth (); int th = renderedwaterText.getheight (); // จุดลายน้ำจุดจุด p = จุดใหม่ (); PX = IW-TW-20; py = ih-th-20; // ลายน้ำลายน้ำ = ลายน้ำใหม่ (renderedwatermarktext, p); // ลายน้ำโปร่งใสลายน้ำ SetTransparency (1); gf = watermark.apply (gifdecoder.decode (src), false); // เอาต์พุต gifencoder.encode (gf, dest); } catch (ioexception e) {e.printstacktrace (); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// เส้นทางที่ภาพต้องเป็นสตริงที่เป็นลายน้ำ srcimgPath = "d: /1.jpg"; สตริง logotext = "คัดลอกไม่ถูกต้อง"; // เส้นทางของไอคอนสตริงลายน้ำภาพ = "d: /2.jpg"; // เส้นทางเอาต์พุตของสตริงไฟล์ลายน้ำ targetTextPath = "d: /qie_text.jpg"; String TargetTextPath2 = "D: /Qie_Text_Text_rotate.jpg"; สตริง targeticonPath = "d: /qie_icon.jpg"; สตริง targeticonPath2 = "d: /qie_icon_rotate.jpg"; System.out.println ("เพื่อเริ่มเพิ่มข้อความลายน้ำลงในภาพ ... "); // ภาพข้อความลายน้ำ MarkimageByText (logotext, srcimgpath, targetTextPath); // เพิ่มข้อความลายน้ำลงในภาพการหมุนข้อความลายน้ำ -45 MarkImageByText (logotext, srcimgpath, targetTextPath2, -45); System.out.println ("เพิ่มข้อความลายน้ำลงในภาพจบ ... "); System.out.println ("เพิ่มภาพลายน้ำลงในภาพเริ่มต้น ... "); SetimageMarkoptions (0.3f, 1, 1, null, null); // เพิ่มภาพลายน้ำลงในภาพการหมุนภาพลายน้ำ -45 MarkimageByicon (IconPath, SrcimgPath, TargeticonPath2, -45); System.out.println ("เพิ่มลายน้ำลงในภาพสิ้นสุด ... "); // เพิ่มลายน้ำในภาพเคลื่อนไหว (เพิ่มไฟล์ภาพเคลื่อนไหวลายน้ำ, เพิ่มลายน้ำ, เพิ่มไฟล์เอาต์พุต) AddTextwaterMarkTogif (ไฟล์ใหม่ ("D: //10.gif"), "คัดลอก Invalid", ไฟล์ใหม่ ("D: //11.gif")); AddimageWaterMarkTogif (ไฟล์ใหม่ ("d: //gif//10.gif"), "d: //gif//3.png", ไฟล์ใหม่ ("d: //gif//4.gif")); -นี่คือวิธีการเพิ่มลายน้ำลงในรูปภาพสามัญและเพิ่มลายน้ำลงในภาพเคลื่อนไหว หากวิธีการเพิ่มลายน้ำลงในรูปภาพธรรมดาสามารถเพิ่มได้สำเร็จหากส่งภาพภาพจะกลายเป็นแบบคงที่ หากวิธีการเพิ่มลายน้ำลงในแอนิเมชั่นถูกส่งสัญญาณจะถูกรายงานโดยตรง
ฉันได้ลองสิ่งเหล่านี้เมื่อฉันทำพวกเขาดังนั้นฉันจะจดบันทึกและบันทึกพวกเขาที่นี่ตอนนี้และฉันหวังว่าพวกเขาจะช่วยพี่น้องที่ต้องการความช่วยเหลือ
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น