首页 > 代码库 > 图片水印
图片水印
谁用maven工程来开发,并且是用struts框架,算是用来回忆一下struts的使用
水印接口类,定义一些属性和加水印的方法
WterMark.java
package youth.hong.watermark;import java.awt.Color;import java.awt.Font;import java.io.File;public interface WaterMark { public static final int X = 300; public static final int Y = 300; public static final int FONT_STYLE = Font.BOLD; public static final Color FONT_COLOR = Color.BLACK; public static final int FONT_SIZE = 50; public static final String MARK_TEXT = "谢谢慕课"; public static final String FONT_NAME = "微软雅黑"; public static final float ALPHA = 0.3f; public static final String IMAGE_WATER = "blue015.png"; public String watermark(File file, String uploadPath, String realUploadPath, String fileFileName, String fileContextType); }
文字水印
FontWaterMark.java
package youth.hong.watermark;import java.awt.AlphaComposite;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 java.io.IOException;import java.io.OutputStream;import javax.imageio.ImageIO;public class FontWaterMark implements WaterMark { @Override public String watermark(File file, String uploadPath, String realUploadPath, String fileFileName, String fileContextType) { OutputStream out = null; try { out = new FileOutputStream(realUploadPath + "/font_" + fileFileName); Image image = ImageIO.read(file); int width = image.getWidth(null); int height = image.getHeight(null); BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = bi.createGraphics(); g.drawImage(image, 0, 0, width, height, null); g.setFont(new Font(FONT_NAME, FONT_STYLE, FONT_SIZE)); g.setColor(FONT_COLOR); int textWidth = this.getTextLength(MARK_TEXT); int textHeight = FONT_SIZE; int widthOff = width - textWidth; int heightOff = height - textHeight; int x = X; int y = Y; if (x > widthOff) { x = widthOff; } if (y > heightOff) { y = heightOff; } g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, ALPHA)); g.drawString(MARK_TEXT, x, y + FONT_SIZE); g.dispose(); ImageIO.write(bi, fileFileName.substring(fileFileName.indexOf(‘.‘) + 1), out); } catch (Exception e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } return uploadPath + "/font_" + fileFileName; } public int getTextLength(String text) { int length = 0; // 存储文字的像素长度,中文字是英文字母的两倍宽度,取其宽度是为了防止它超出图片的范围 int pixValue = http://www.mamicode.com/0; for (int i = 0; i < text.length(); i++) { length = String.valueOf(text.getBytes()).length(); if (length > 1) { pixValue += FONT_SIZE; } else { pixValue += FONT_SIZE / 2; } } return pixValue; }}
图片水印
package youth.hong.watermark;import java.awt.AlphaComposite;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import javax.imageio.ImageIO;public class ImageWaterMark implements WaterMark { @Override public String watermark(File file, String uploadPath, String realUploadPath, String fileFileName, String fileContextType) { OutputStream out = null; File f = new File(realUploadPath + "/" + IMAGE_WATER); System.out.println(f); try { out = new FileOutputStream(realUploadPath + "/image_" + fileFileName); Image image = ImageIO.read(file); Image imageWater = ImageIO.read(f); int width = image.getWidth(null); int height = image.getHeight(null); BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = bi.createGraphics(); g.drawImage(image, 0, 0, width, height, null); int imageWidth = imageWater.getWidth(null); int imageHeight = imageWater.getHeight(null); int widthOff = width - imageWidth; int heightOff = height - imageHeight; int x = X; int y = Y; if (x > widthOff) { x = widthOff; } if (y > heightOff) { y = heightOff; } g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.7f)); g.drawImage(imageWater, x, y, null); g.dispose(); ImageIO.write(bi, fileFileName.substring(fileFileName.indexOf(‘.‘) + 1), out); } catch (Exception e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } return uploadPath + "/image_" + fileFileName; } }
多文字水印
package youth.hong.watermark;import java.awt.AlphaComposite;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 java.io.IOException;import java.io.OutputStream;import javax.imageio.ImageIO;public class MoreFontWaterMark implements WaterMark { @Override public String watermark(File file, String uploadPath, String realUploadPath, String fileFileName, String fileContextType) { OutputStream out = null; try { out = new FileOutputStream(realUploadPath + "/font_" + fileFileName); Image image = ImageIO.read(file); int width = image.getWidth(null); int height = image.getHeight(null); BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = bi.createGraphics(); g.drawImage(image, 0, 0, width, height, null); g.setFont(new Font(FONT_NAME, FONT_STYLE, FONT_SIZE)); g.setColor(FONT_COLOR); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, ALPHA)); //倾斜画布,以画布的中心点倾斜30° g.rotate(Math.toRadians(30), bi.getWidth() / 2, bi.getHeight() / 2); int textWidth = this.getTextLength(MARK_TEXT); int x = -width / 2; while(x < width * 2) { int y = -height / 2; while(y < height * 2) { g.drawString(MARK_TEXT, x, y); y += 100; } x = x + 100 + textWidth; } g.dispose(); ImageIO.write(bi, fileFileName.substring(fileFileName.indexOf(‘.‘) + 1), out); } catch (Exception e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } return uploadPath + "/font_" + fileFileName; } public int getTextLength(String text) { int length = 0; // 存储文字的像素长度 int pixValue = http://www.mamicode.com/0; for (int i = 0; i < text.length(); i++) { length = String.valueOf(text.getBytes()).length(); if (length > 1) { pixValue += FONT_SIZE; } else { pixValue += FONT_SIZE / 2; } } return pixValue; }}
多图片水印
package youth.hong.watermark;import java.awt.AlphaComposite;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import javax.imageio.ImageIO;public class MoreImageWaterMark implements WaterMark { @Override public String watermark(File file, String uploadPath, String realUploadPath, String fileFileName, String fileContextType) { OutputStream out = null; File f = new File(realUploadPath + "/" + IMAGE_WATER); try { out = new FileOutputStream(realUploadPath + "/moreImage_" + fileFileName); Image image = ImageIO.read(file); Image imageWater = ImageIO.read(f); int width = image.getWidth(null); int height = image.getHeight(null); BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = bi.createGraphics(); g.drawImage(image, 0, 0, width, height, null); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, ALPHA)); //倾斜画布,以画布的中心点倾斜30° g.rotate(Math.toRadians(30), bi.getWidth() / 2, bi.getHeight() / 2); int imageWidth = imageWater.getWidth(null); int imageHeight = imageWater.getHeight(null); int x = -width / 2; while(x < width * 2) { int y = -height / 2; while(y < height * 2) { g.drawImage(imageWater, x, y, null); y += 100 + imageHeight; } x = x + 100 + imageWidth; } g.dispose(); ImageIO.write(bi, fileFileName.substring(fileFileName.indexOf(‘.‘) + 1), out); } catch (Exception e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } return uploadPath + "/moreImage_" + fileFileName; }}
上传服务类
package youth.hong.watermark;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class UploadService { public String upload(File file, String uploadPath, String realUploadPath, String fileFileName, String fileContextType) { InputStream in = null; OutputStream out = null; try { in = new FileInputStream(file); out = new FileOutputStream(realUploadPath + "/" + fileFileName); byte[] buff = new byte[1024]; while ((in.read(buff)) > 0) { out.write(buff); } } catch (Exception e) { System.out.println("请求的操作无法在使用用户映射区域打开的文件上执行。"); } finally { try { if (in != null) { in.close(); } if (out != null) { out.close(); } } catch (IOException e) { e.printStackTrace(); } } return uploadPath + "/" + fileFileName; }}
action
package youth.hong.watermark;import java.io.File;import java.util.ArrayList;import java.util.List;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class WaterMarkAction extends ActionSupport { private static final long serialVersionUID = 1L; private List<File> file; private List<String> fileContentType; private List<String> fileFileName; private List<String> srcs; public List<String> getSrcs() { return srcs; } public void setSrcs(List<String> srcs) { this.srcs = srcs; } @Override public String execute() throws Exception { dealWithFiles(); return SUCCESS; } public String upload() { return "upload"; } public List<File> getFile() { return file; } public void setFile(List<File> file) { this.file = file; } public List<String> getFileContentType() { return fileContentType; } public void setFileContentType(List<String> fileContentType) { this.fileContentType = fileContentType; } public List<String> getFileFileName() { return fileFileName; } public void setFileFileName(List<String> fileFileName) { this.fileFileName = fileFileName; } public void dealWithFiles() { List<String> imageSrcs = new ArrayList<String>();// UploadService us = new UploadService(); WaterMark wm = new MoreImageWaterMark(); String uploadPath = "/images"; String realUploadPath = ServletActionContext.getServletContext().getRealPath("/images"); System.out.println(realUploadPath); for (int i = 0; i < file.size(); i++) { // String imageSrc = http://www.mamicode.com/us.upload(file.get(i), uploadPath,>// realUploadPath, fileFileName.get(i), fileContentType.get(i)); // String imageSrc = http://www.mamicode.com/fwm.watermark(file.get(i), uploadPath,>// realUploadPath, fileFileName.get(i), fileContentType.get(i)); String imageSrc =http://www.mamicode.com/ wm.watermark(file.get(i), uploadPath, realUploadPath, fileFileName.get(i), fileContentType.get(i)); imageSrcs.add(imageSrc); System.out.println(imageSrc); } this.setSrcs(imageSrcs); }}
struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <constant name="struts.enable.DynamicMethodInvocation" value="http://www.mamicode.com/true" /> <constant name="struts.devMode" value="http://www.mamicode.com/true" /> <constant name="struts.multipart.saveDir" value="http://www.mamicode.com/image" /> <constant name="struts.multipart.maxSize" value="http://www.mamicode.com/2097152" /> <package name="default" namespace="/" extends="struts-default"> <action name="watermark" class="youth.hong.watermark.WaterMarkAction"> <result> /index.jsp </result> <result name="upload"> /watermark.jsp </result> </action> </package></struts>
web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app> <display-name>Archetype Created Web Application</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>youth.hong.watermark</groupId> <artifactId>watermark-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 如果install了那么可以不写也找的到 --> <relativePath>../watermark-parent/pom.xml</relativePath> </parent> <artifactId>watermark-main</artifactId> <packaging>war</packaging> <name>watermark-main Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> </plugin> </plugins> </build></project>
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><% String path = request.getServletPath();%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>esrfgdfbdfgb <s:iterator value="http://www.mamicode.com/srcs" var="src"> <img alt="图片加载失败!" src=http://www.mamicode.com/‘
watermark.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><form action="<%=request.getServletPath() %>/watermark!execute" method="post" enctype="multipart/form-data"> <input type="file" name="file" /><br /> <input type="file" name="file" /><br /> <input type="file" name="file" /><br /> <input type="file" name="file" /><br /> <input type="file" name="file" /><br /> <input type="submit" value="http://www.mamicode.com/submit" /> </form></body></html>
图片水印
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。