قبل القراءة ، تحتاج إلى فهم SpringMVC أولاً ، ثم انظر إلى صورة التأثير أولاً.
كتابة الكود
1. استيراد الحزم ذات الصلة
2. ملف التكوين
web.xml
<؟ XSI: schemalocation = "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns id = "webapp_id" version = "3.1"> <name-name> watermarkspringmvc </display-name> <vishlet> <vishlet-name> dispatcherservlet </servlet-name> <Servlet-Class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <Param-value> classpath: springmvc.xml </parm-value> </ith-param> <load-on-startup> 1 </over-on-startup> </servlet> <Crevlet-mapping> <servlet-name> dispatcherservlet </servlet-name> <lisp-file> index.jsp </iship-file> </swith-file-list> </web-app>
springmvc.xml
<؟ xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http://www.springframework.org/schema/mvc" XSI: Schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/sctxt http://www.springframework.org/schema/context/spring-context-4.0.xsd <mvc: الافتراضي-servletller/> <mvc: يحركه التعليقات التوضيحية/> <السياق: مكون المستحضر الأساسي = "com.wenteryan"> </context: component-scan> <bean> <property name = "prefix" value = "/"/"> propert value = "org.springframework.web.servlet.view.jstlview"> </property> </bean> <bean id = "multipartresolver"> <property name = "defaultencoding" value = "utf-8" </property> <property name = maxuploadsize " name = "MaxInMemorySize" value = "40960"> </property> </bean> </bans>
3. اكتب إجراء
علامة مائية
package com.wenteryan.watermarkspringmvc ؛ import javax.servlet.http.httpsession ؛ استيراد org.springframework.beans.factory.antation.autowired org.springframework.web.bind.annotation.requestmethod ؛ استيراد org.springframework.web.bind.annotation.requestparam ؛ import org.springframework.web.multipart.commonsmonsmultipartfile ؛ com.wenteryan.service.markservice ؛ استيراد com.wenteryan.service.uploadservice ؛ controllerpublic class watermarkaction {private markservice mackservice ؛ uploadservice uploadservice ؛ requestmapping (value = "/watermark" ، method = requestMethod.post) نموذج العلامة العامة ( @requestparam ("image") ملف commonsmultipartfile ، جلسة httpsession) يلقي استثناء {string eploadpath = "/images" ؛ String RealUploAdPath = Session.getServletContext (). getRealPath (UploadPath) ؛ string imageUrl = UploadService.uploadimage (ملف ، exploadpath ، realuploadpath) ؛ String Logoimageurl = MackService.watermark (ملف ، eploadpath ، RealUploAdpath) ؛ modelandview ret = new ModelAndView () ؛ ret.addobject ("ImageUrl" ، ImageUrl) ؛ ret.addobject ("logoimageurl" ، logoimageurl) ؛ Ret.setViewName ("Watermark") ؛ العودة ret. } autowired public void setMackService (markservice mackservice) {this.mackservice = mackservice ؛ } autowired public void setUploadService (UploadService UploadService) {this.uploadService = UploadService ؛ }}4. كتابة فصول الخدمة
Markservice .java
package com.wenteryan.service ؛ import java.awt.color ؛ import java.awt.font ؛ import java.io السلسلة النهائية الثابتة العامة font_name = "Microsoft Yahei" ؛ الثابت العام النهائي int font_size = 120 ؛ public static final int font_stype = font.bold ؛ اللون الثابت العام font_color = color.red ؛ الثابت العام النهائي int x = 10 ؛ استاتيكي عام نهائي int y = 10 ؛ alpha الثابتة العامة = 0.3F ؛ سلسلة Watermark العامة (ملف commonsmultipartfile ، سلسلة uploadpath ، string realuploadpath) ؛ }
5. كتابة فئات تنفيذ الواجهة
تحميل. جافا
package com.wenteryan.service.impl ؛ استيراد java.io.fileOutputStream ؛ استيراد java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.io.outputstream ؛ استيراد org.springframework.stereopee.service ؛ استيراد ؛ استيراد org.springframework.web.multipart.commons.CommonSmultipartFile ؛ servicepublic class uploadservice {public string uploadImage (commonsmultipartfile ، string uploadpath ، string realuploadpath) {propemsstream is = null ؛ OutputStream OS = NULL ؛ حاول {iS = file.getInputStream () ؛ OS = جديد fileOutputStream (RealUploAdpath+"/"+file.getoriginalfilename ()) ؛ Byte [] Buffer = New Byte [1024] ؛ int len = 0 ؛ بينما ((len = is.read (buffer))> 0) {os.write (buffer) ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {if (is! = null) {try {is.close () ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ }} if (os! = null) {try {os.close () ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ }} return UploadPath+"/"+file.getoriginalfilename () ؛ }}MarkserviceImpl. جافا
package com.wenteryan.service.impl ؛ import java.awt.alphacomposite ؛ import java.awt java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.io.outputstream ؛ استيراد javax.imageio.imageio ؛ استيراد org.springframework.stereotype. com.sun.image.codec.jpeg.jpegcodec ؛ استيراد com.sun.image.codec.jpeg.jpegimageencoder ؛ استيراد com.wenteryan.service.markservice RealUploAdpath) {// todo method method stub string logofilename = "logo"+file.getoriginalfilename () ؛ OutputStream OS = NULL ؛ حاول {Image Image2 = imageio.read (file.getInputStream ()) ؛ عرض int = image2.getWidth (null) ؛ ارتفاع int = image2.getheight (null) ؛ BufferedImage Bufferimage = جديد BufferEdImage (العرض ، الارتفاع ، bufferedImage.type_int_rgb) ؛ graphics2d g = bufferimage.creategraphics () ؛ G.DrawImage (Image2 ، 0 ، 0 ، العرض ، الارتفاع ، NULL) ؛ G.SetFont (خط جديد (font_name ، font_stype ، font_size)) ؛ G.SetColor (font_color) ؛ int width1 = font_size*getTextLength (mark_text) ؛ int height1 = font_size ؛ int widthdiff = width-width1 ؛ int heightdiff = ارتفاع الارتفاع 1 ؛ int x = x ؛ int y = y ؛ if (x> widthdiff) {x = widthdiff ؛ } if (y> heightdiff) {y = heightdiff ؛ } g.setComposite (alphacomposite.getInstance (Alphacomposite.src_atop ، alpha)) ؛ G.DrawString (mark_text ، x ، y+font_size) ؛ G.Dispose () ؛ OS = جديد fileOutputStream (RealUploAdpath+"/"+logofilename) ؛ JPegImageenCoder en = jpegcodec.createjpegencoder (OS) ؛ en.encode (bufferimage) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {if (os! = null) {try {os.close () ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ }} إرجاع UploadPath+"/"+logofilename ؛ } public int getTextLength (سلسلة سلسلة) {int length = text.length () ؛ لـ (int i = 0 ؛ i <text.length () ؛ i ++) {string s = string.valueof (text.charat (i)) ؛ if (s.getBytes (). length> 1) {length ++ ؛ }} الطول = الطول ٪ 2 == 0؟ الطول/2: الطول/2+1 ؛ عودة طول }} 6. اكتب صفحة
index.jsp
<form Action Action = "Watermark" method = "post" enctype = "multipart/form-data"> <h2> يرجى تحديد الصورة المحمّلة </h2> <viv> <br> <input type = "file" name = "image" id = "image"/> </div> <br> <brate reput
Watermark.jsp
<viv> <img src = "$ {pagecontext.request.contextpath} $ {imageurl}"/> <img src = "$ {pagecontext.request.context.request.request </div>لخص
لدى Java حزمة خاصة لمعالجة الصور ، والتي يجب أن تكون قادرة أيضًا على تنفيذ وظيفة العلامة المائية. بعد التحقق من المعلومات ، وجدت أن Java مريحة للغاية لتنفيذ العلامات المائية. العلامة المائية يمكن أن تكون صورًا أو نصًا. سيكون هناك علامات مائية في المرحلة اللاحقة. إذا كنت في حاجة إليها في المستقبل ، فيمكنك كتابة رمز لمعالجة صورك الخاصة على دفعات.
ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون من المفيد للجميع تعلم برمجة Java.