Antes de ler, você precisa entender primeiro o SpringMVC e depois olhar para a imagem do efeito primeiro.
Escrita de código
1. Pacotes de importação relacionados
2. Arquivo de configuração
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id = "webApp_id" versão = "3.1"> <Name-name> Watermarkspringmvc </seming-name> <Verlet> <Servlet-name> DispatcheserServlet </servlet-name> <sispather-class> orlig.springframework.web.servlet.dispatrlettlet </class> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <lorda-fil-bile> index.jsp </langly-fil-bile> </list-File-List> </web-App>
springmvc.xml
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 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/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd "> <mvc: default-servlet-handler/> <mvc-4.0.xsd"> <mvc: default-servlet-handler/> <mvc-.0.xsd "> <mvc: default-servlet/> <mvc-.0.xsd: Base-Package = "com.wenteryan"> </context: component-scan> <ean> <propriedade name = "prefixo" value = "/"> </propriedade> <propriedade name = "sufix" value = ". id = "multipartresolver"> <propriedade name = "defaultEncoding" value = "utf-8"> </propriedade> <propriedade name = "maxuploadsize" value = "10485760000"> </property> <names)
3. Escreva uma ação
WatermarkAction .Ação
pacote com.wenteryan.watermarkspringmvc; importar javax.servlet.http.httpSession; importar org.springframework.beans.factory.annotation.autowired; importação org.springframework.sterotype.controller; import.springfringfringfReweb.wrebring.tereotype.controller; import.springfringfringfreweb.wrebring.teretype.controller; org.springframework.web.bind.annotation.requestmethod; importar org.springframework.web.bind.annotation.requestparam; importação Org.sPringFramework.web.multipart.commonsmworksMowrvVonsting; com.wenteryan.service.markservice; importar com.wenteryan.service.uploadservice; @ControllerPublic Classe WatermarkAction {Private MarkService Mackservice; Serviço de upload de upload privado; @RequestMapping (Value = "/WaterMark", Method = requestMethod.Post) Public ModelAndView Watermark (@RequestParam ("Image") CommOnsmultipartFile File, HttpSession Session) lança exceção {string uploadpath = "/imagens"; String realUPLOADPath = session.getServletContext (). GetRealPath (uploadPath); String imageurl = uploadservice.uploadimage (arquivo, uploadpath, realupLoadPath); String logoImageUrl = mackservice.watermark (arquivo, uploadpath, realupLoadPath); ModelAndView ret = new ModelAndView (); ret.addobject ("imageurl", imageurl); ret.addObject ("logoImageurl", logoImageurl); ret.setViewName ("Watermark"); retornar ret; } @AUTOWIRED Public void SetMackService (MarkService MackService) {this.mackService = MackService; } @AUTOWIRed Public void setupLoadService (uploadService uploadService) {this.upLoadService = uploadService; }}4. Escreva aulas de serviço
MarkService .Java
pacote com.wenteryan.service; importar java.awt.color; importar java.awt.font; importar java.io.file; importar org.springframework.web.multipart.commons.commonsmultipartFile; public static final string font_name = "Microsoft yahei"; public static final int font_size = 120; public static final int font_stype = font.BOLD; public static final color font_color = color.red; public static final int x = 10; public static final int y = 10; Float estático público alfa = 0,3f; Public String Watermark (arquivo CommonsMultipartFile, String uploadPath, String realUploadPath); }
5. Classes de implementação da interface de gravação
UploadService .Java
pacote com.wenteryan.service.impl; importar java.io.fileOutputStream; importar java.io.ioException; importar java.io.inputStream; importar java.io.outputStream; importar org.springframework.sterotype.service; importar; importar; importar; org.springframework.web.multipart.commons.CommonsmultipartFile; @ServicePublic Classe uPLOPLEVERSERVICE {public String UploadImage (CommonsmultipartFile, string uploadpath, string realUPLOADPath) {InputStram é = Null; OutputStream OS = NULL; tente {is = file.getInputStream (); OS = new FileOutputStream (realUploadPath+"/"+file.getoriginalfilename ()); byte [] buffer = novo byte [1024]; int len = 0; while ((len = is.read (buffer))> 0) {os.write (buffer); }} catch (Exceção e) {e.printStackTrace (); } finalmente {if (is! = null) {try {is.close (); } catch (ioexception e) {// TODO GATO GENERADO AUTOMENTADO BLOCO E.PRINTSTACKTRACE (); }} if (os! = null) {try {os.close (); } catch (ioexception e) {// TODO GATO GENERADO AUTOMENTADO BLOCO E.PRINTSTACKTRACE (); }} retornar uploadPath+"/"+file.getoriginalfilename (); }}MarkServiceImpl .Java
pacote com.wenteryan.service.impl; importar java.awt.alphacomposite; importar java.awt.font; importar java.awt.graphics2d; importar java.awt.Image; importação jio Java.awt.image.image.bufferImage; importação jIOT.Ilout; java.io.inputStream; importar java.io.OutputStream; importar javax.imageio.imageio; importar org.springframework.stereotype.service; importar org.springframework.web.multipart.commons.CommonsmmmtFile odemage.sage.sage.sunage.munpart.Commons.CommonsmmmtFile; com.sun.image.codec.jpeg.jpegImageEncoder; import com.wenteryan.service.markservice; @ServicePublic classe MarkServiceImpl implementa MarkService {@Override String Watermark (Arquivo CommonSmultiPtFile, StringPathpath, String REALOUPLOTPATHPATPATPATPATPATPATPATPATPATPATION) "logotipo"+file.getoriginalfilename (); OutputStream OS = NULL; tente {imagem image2 = imageio.read (file.getInputStream ()); int width = image2.getWidth (nulo); int height = image2.getheight (nulo); BufferImage bufferImage = new bufferImage (largura, altura, bufferImage.type_int_rgb); Graphics2d g = bufferImage.creategraphics (); G.Drawimage (Image2, 0, 0, largura, altura, nulo); g.setFont (nova fonte (font_name, font_stype, font_size)); g.setColor (font_color); int width1 = font_size*getTextLength (mark_text); int alting1 = font_size; int widthdiff = width-width1; int altingdiff = altura-height1; int x = x; int y = y; if (x> widthdiff) {x = widthdiff; } if (y> altingdiff) {y = altingdiff; } g.SetComposite (alphacomposite.getInstance (alphacomposite.src_atop, alfa)); g.DrawString (mark_text, x, y+font_size); G.Dispose (); OS = new FileOutputStream (RealUploadPath+"/"+LogoFilename); JPEGIMAGEENCODER EN = JPEGCODEC.CREATEJPEGENCODER (OS); en.encode (bufferImage); } catch (Exceção e) {e.printStackTrace (); } finalmente {if (os! = null) {tente {os.close (); } catch (ioexception e) {// TODO GATO GENERADO AUTOMENTADO BLOCO E.PRINTSTACKTRACE (); }} retornar uploadPath+"/"+logofilename; } public int getTextLength (String text) {int length = text.Length (); for (int i = 0; i <text.length (); i ++) {string s = string.valueof (text.charat (i)); if (s.getBytes (). Comprimento> 1) {comprimento ++; }} comprimento = comprimento%2 == 0? Comprimento/2: comprimento/2+1; comprimento de retorno; }} 6. Escreva uma página
index.jsp
<form action = "Watermark" Method = "post" ENCTYPE = "Multipart/form-Data"> <H2> Selecione a imagem carregada </h2> <div> <br> <brut type = "file" name = "image" id = "imagem"/> </div> <br> <br> <butt = "subt"> start (start) </button "/>
Watermark.jsp
<div> <img src = "$ {pageContext.request.ContextPath} $ {imageurl}"/> <img src = "$ {Pagecontext.request.Context} $ {logoImageUrl}"/> <a href = "$ {Pag </div>Resumir
O Java possui um pacote especial de processamento de imagem, que também deve ser capaz de implementar a função de marca d'água. Depois de verificar as informações, descobri que o Java é muito conveniente para implementar marcas d'água. A marca d'água pode ser imagens ou texto. Haverá marcas d'água no estágio posterior. Se você precisar no futuro, pode escrever um código para processar suas próprias imagens em lotes.
O exposto acima é tudo sobre este artigo, espero que seja útil para todos aprenderem a programação Java.