هذين اليومين ، لقد قمت بتحميل الصور وفقًا لاحتياجاتي. لأكون صادقًا ، لا أعرف أن جافا يمكن أن تعمل مثل هذا. نظرًا لوجود شرط ، ذهبت للعثور على المعلومات ودرستها. سوف أشاركها الآن ، على أمل مساعدة الإخوة المحتاجين.
تختلف إضافة العلامات المائية إلى الصور العادية عن إضافة العلامات المائية إلى الرسوم المتحركة. إضافة العلامات المائية إلى الصور العادية مكتوبة بطريقة جافا الخاصة. يتم استخدام إطار عمل 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 {// الشفافية المائية alpha alpha = 0.5f ؛ // الموقف المائي الموضع الأفقي الخاص بوضع الموضع = 150 ؛ // الموقف المائي الموضع العمودي الخاص int positionhight = 300 ؛ // Watermark Width Private Int Width = 80 ؛ // العلامة المائية عالية المستوى الباحث = 80 ؛ // watermark text font font font = new font ("宋体" ، font.bold ، 72) ؛ // Text Text Color Color Private Color = Color.red ؛ / *****************: وضعية الموضع ، int positionhight ، عرض int ، ارتفاع int ، خط الخط ، لون اللون) {if (alpha! = 0.0f) this.alpha = alpha ؛ if (positionwidth! = 0) this.positionWidth = positionWidth ؛ if (positionHeight! = 0) this.positionHeight = positionHeight ؛ إذا (الارتفاع! = 0) this.hight = الارتفاع ؛ إذا (العرض! = 0) this.width = العرض ؛ if (font! = null) this.font = font ؛ if (color! = null) this.color = color ؛ } / ** * أضف صورة مائية إلى الصورة * * param iconpath * مسار صورة ماء * param srcimgpath * مسار الصورة المصدر * param targetpath * مسار الصورة الهدف * / public void markimagebyicon (string iconpath ، string srcimgpath ، string targatpath) ستر باطل؛ حاول {image srcimg = imageio.read (ملف جديد (srcimgpath)) ؛ BufferedImage buffimg = جديد bufferedImage (srcimg.getwidth (null) ، srcimg.getheight (null) ، bufferedImage.type_int_rgb) ؛ // 1. احصل على كائن الفرشاة Graphics2d g = buffimg.creategraphics () ؛ . 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 ، بحيث يمكن تعيين الشفافية Imgicon = new ImageIcon (IconPath) ؛ // 5. احصل على كائن الصورة. صورة IMG = IMGICON.GETIMAGE () ؛ G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_atop ، alpha)) ؛ عدد صحيح x = srcimg.getWidth (null) ؛ عدد صحيح y = srcimg.getheight (null) ؛ // 6. موقع صورة العلامة المائية G.DrawImage (IMG ، X- (عرض الموضع+) ، Y- (الموضع+الارتفاع) ، العرض ، الارتفاع ، فارغة) ؛ G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_over)) ؛ // 7. إطلاق المورد G.Dispose () ؛ // 8. إنشاء صورة OS = جديد fileOutputStream (TargerPath) ؛ Imageio.write (Buffimg ، "JPG" ، OS) ؛ System.out.println ("صورة كاملة إضافة صورة مائية") ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {try {if (null! = os) os.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }}}} / ** * إضافة نص ماء إلى الصورة * * param logotext * نص ماء * param srcimgpath * path path path * param Target * target path path * / public void markimagebetex } / ** * أضف نص علامة مائية إلى الصورة ، وقم بتعيين زاوية التناوب لنص العلامة المائية * * param logotext * param logotext * param srcimgpath * @param targatpath * param cergene * / public void markimagebytex OutputStream OS = NULL ؛ حاول {// 1. صورة صورة المصدر srcimg = imageio.read (ملف جديد (srcimgpath)) ؛ BufferedImage buffimg = جديد bufferedImage (srcimg.getwidth (null) ، srcimg.getheight (null) ، bufferedImage.type_int_rgb) ؛ // 2. احصل على كائن الفرشاة Graphics2d g = buffimg.creategraphics () ؛ . 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 ، وضع الموضع ، الموضع) ؛ // 9. إطلاق المورد G.Dispose () ؛ // 10. إنشاء صورة OS = FileOutputStream جديد (TargerPath) ؛ Imageio.write (Buffimg ، "JPG" ، OS) ؛ System.out.println ("الصورة كاملة إضافة نص مائي") ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {try {if (null! = is) is.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } حاول {if (null! = os) os.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }) gifdecoder.decode (src) ؛ // إنشاء كائن gifimage. gifimage resizeImg = giftransformer.resize (gifimage ، العرض ، الارتفاع ، صحيح) ؛ gifencoder.encode (resizeImg ، dest) ؛ }. Makegif (ملف جديد (SRC) ، ملف جديد (Dest) ، gifimage.getScreenWidth () / 2 ، gifimage.getScreenheight () / 2) ؛ }. Makegif (SRC ، Dest ، gifimage.getScreenWidth () / 2 ، gifimage.getScreenheight () / 2) ؛ }. } /*** أضف علامة مائية نصية إلى الرسوم المتحركة* /public void addtextwatermarktogif (ملف SRC ، String Watermarktext ، ملف الملف) يلقي iOexception {// watermark التهيئة والإعداد (الخط ، النمط ، الحجم ، اللون) textPainter textPainter = new textPainter (new font ("Bold" ، TextPainter.setOutLinePaint (color.white) ؛ bufferedImage RenderwaterMarkText = textPainter.RendersTring (WatermarkText ، true) ؛ // كائن الصورة gifimage gf = gifdecoder.decode (src) ؛ // احصل على حجم الصورة int iw = gf.getScreenWidth () ؛ int ih = gf.getScreenHeight () ؛ // احصل على حجم العلامة المائية int tw = redustedwatermarktext.getWidth () ؛ int th = redustedwatermarktext.getheight () ؛ // النقطة المائية p = new point () ؛ px = iw - tw - 5 ؛ py = ih - th - 4 ؛ // إضافة علامة مائية للعلامة المائية = علامة مائية جديدة (Renderwatermarktext ، P) ؛ gf = watermark.apply (gifdecoder.decode (src) ، true) ؛ // output gifencoder.encode (gf ، dest) ؛ } / *** أضف علامة مائية الصورة في الرسوم المتحركة* / public void addimageWatermarkTogif (ملف SRC ، String Watermarkpath ، ملف الملف) {try {bufferedImage renderwatermarktext = imageio.read (ملف جديد (Watermarkathpath)) ؛ // كائن الصورة gifimage gf = gifdecoder.decode (src) ؛ // احصل على حجم الصورة int iw = gf.getScreenWidth () ؛ int ih = gf.getScreenHeight () ؛ // احصل على حجم العلامة المائية int tw = redustedwatermarktext.getWidth () ؛ int th = redustedwatermarktext.getheight () ؛ // نقطة وضع العلامة المائية P = new point () ؛ px = IW-TW-20 ؛ PY = IH-TH-20 ؛ // العلامة المائية المائية العلامة المائية = علامة مائية جديدة (RenseedWatermarkText ، P) ؛ // الشفافية المائية Watermark.SetTransparency (1) ؛ gf = watermark.apply (gifdecoder.decode (src) ، false) ؛ // output gifencoder.encode (gf ، dest) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} public static void main (string [] args) {// path حيث تحتاج الصورة إلى أن تكون سلسلة srcimgpath = "d: /1.jpg" ؛ سلسلة logotext = "نسخ غير صالح" ؛ // مسار الصورة المائية iconpath = "d: /2.jpg" ؛ // مسار الإخراج لسلسلة ملف Watermark TargetTextPath = "D: /QIE_TEXT.JPG" ؛ String TargetTextPath2 = "D: /QIE_TEXT_ROTATE.JPG" ؛ String TargetIconPath = "D: /QIE_ICON.JPG" ؛ String TargetIconPath2 = "D: /QIE_ICON_ROTATE.JPG" ؛ System.out.println ("لبدء إضافة نص مائي إلى الصورة ...") ؛ . // إضافة نص مائي إلى الصورة ، دوران نص مائي -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") ، "نسخة غير صالحة" ، ملف جديد ("D: //11.gif")) ؛ addimageWatermarkTogif (ملف جديد ("d: //gif//10.gif") ، "d: //gif///3.png" ، ملف جديد ("d: //gif//4.gif")) ؛ }}فيما يلي طرق إضافة العلامات المائية إلى الصور العادية وإضافة العلامات المائية إلى الرسوم المتحركة. إذا كان من الممكن إضافة طريقة إضافة العلامات المائية إلى الصور العادية بنجاح إذا تم إرسال الصورة ، فستصبح الصورة ثابتة. إذا تم إرسال طريقة إضافة العلامات المائية إلى الرسوم المتحركة ، فسيتم الإبلاغ عن الخطأ مباشرة.
لقد جربت هذه عندما كنت أفعلها ، لذلك سأقوم بتدوين الملاحظات وأسجلها هنا الآن ، وآمل أن يتمكنوا من مساعدة الإخوة المحتاجين.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.